Hoppa till innehållet
AI-grafen
DAI-utvecklareLaboration· ca 50 min· sandlåda på servern

Labb: tensorer, autograd och din första träningsloop

Räkna gradienter med autograd, jämföra med handräkning, och träna en linjär modell med en riktig loop.

Teori

requires_grad=True spårar tensorn, .backward() fyller .grad, gradienter ackumuleras — nollställ varje steg. torch.no_grad() stänger av spårning när du uppdaterar vikter för hand.

Deluppgifter

  1. gradient med autograd — grad_of(f, x0) returnerar df/dx i x0 med autograd, där f är en Python-funktion på en tensor.
  2. gd_steps — gd_steps(f, x0, lr, steps) gör gradient descent på f med autograd och nollställer gradienten varje steg.
  3. train_linear — train_linear(X, y, lr, steps) tränar w, b (MSE) och returnerar (w, b).

Godkänt när: mse <= 0.05

Startkoden

körs i en isolerad sandlåda på servern
import torch


def grad_of(f, x0):
    # TODO: x = torch.tensor(float(x0), requires_grad=True); y = f(x); y.backward(); return x.grad.item()
    ...


def gd_steps(f, x0, lr=0.1, steps=100):
    x = torch.tensor(float(x0), requires_grad=True)
    for _ in range(steps):
        # TODO: forward, backward, uppdatera under no_grad, nollställ grad
        ...
    return x.item()


def train_linear(X, y, lr=0.05, steps=500):
    w = torch.zeros(X.shape[1], requires_grad=True)
    b = torch.zeros(1, requires_grad=True)
    for _ in range(steps):
        # TODO: pred = X @ w + b; mse; backward; steg; nollställ
        ...
    return w.detach(), b.detach()

Du skriver koden, tester du inte ser avgör om den håller. Skapa ett gratis konto för att köra labben.

Prova diagnosenSkapa konto gratis

Förväntade resultat

grad_of(lambda x: x**2 + 2*x, 3.0) = 8; gd_steps på (x−3)² når ≈3; linjär modell på y = 2x + 1 + brus ger MSE < 0,05.

Vanliga fel

  • Glömmer zero_() → gradienten ackumuleras och stegen blir fel.
  • Uppdaterar vikter utan torch.no_grad() → autograd-fel.
  • .item() saknas när ett tal ska returneras.