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
- gradient med autograd —
grad_of(f, x0)returnerar df/dx i x0 med autograd, där f är en Python-funktion på en tensor. - gd_steps —
gd_steps(f, x0, lr, steps)gör gradient descent på f med autograd och nollställer gradienten varje steg. - 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å servernimport 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 gratisFö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.