Läsa och nollställa .grad
Varför gradienter ackumuleras och måste återställas
Läsa och nollställa .grad är en gratis lektion i Deep Learning Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Deep Learning Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Deep Learning Academy innehåller totalt 4 lektioner.
Attributet .grad
Efter backward lagrar varje tränad tensor sin gradient i .grad. Om du läser av den ser du hur förlusten påverkas av förändringar i den tensorn.
print(weight.grad)Gradienter börjar som None
Innan något backward-anrop har gjorts är .grad None, inte noll. PyTorch skapar den först när den första uppsättningen gradienter faktiskt anländer.
Gradienter ackumuleras
Här kommer överraskningen: backward adderar till .grad i stället för att ersätta värdet. Om du anropar backward två gånger utan att rensa, läggs talen ihop.
Varför ackumulering finns
Detta beteende är avsiktligt. Det låter dig summera gradienter från flera minibatchar före en uppdatering, vilket är praktiskt när du vill simulera en större batch.
Det dolda felet
Om du glömmer att rensa gradienterna förstör gamla gradienter nästa steg, så modellen tränas på felaktiga tal. Detta tysta bugg drabbar nästan alla någon gång.
Nollställ dem vid varje steg
Lösningen är att återställa gradienterna före varje backward. Med en optimerare anropar du helt enkelt zero_grad() i början av varje träningssteg.
optimizer.zero_grad()Rätt ordning
Ordningen i loopen är fast: zero_grad, framåtpassering, loss, backward, step. Om du nollställer först använder varje steg garanterat bara gradienterna från denna batch.
optimizer.zero_grad()
loss.backward()
optimizer.step()Rensa utan en optimerare
Har du ingen optimerare ännu? Du kan själv nollställa gradienterna genom att sätta varje tensors .grad till None före nästa backward-anrop.
w.grad = Noneset_to_none är billigare
I nyare kod föredrar man zero_grad(set_to_none=True). Att sätta gradienterna till None i stället för att fylla dem med nollor sparar lite minne och tid.
Läs av gradienter för felsökning
Det är utmärkt för felsökning att titta på .grad. Enbart nollor kan betyda en inaktiv neuron, och mycket stora värden varnar för exploderande gradienter innan träningen spårar ur.
En vana värd att skapa
Gör nollställningen automatisk. Varje tillförlitlig träningsloop rensar gradienterna först, så modellen bara lär sig från den aktuella batchen.
Snabb kontroll
Sammanfattning
Gradienter finns i .grad och ackumuleras mellan backward-anrop, så du måste rensa dem vid varje steg med zero_grad. Om du glömmer det försämras träningen i tysthet. 🧹
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Läsa och nollställa .grad” gratis?
Ja – hela texten till ”Läsa och nollställa .grad” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Deep Learning Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Deep Learning Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Läsa och nollställa .grad”?
Varför gradienter ackumuleras och måste återställas Ni övar på Deep Learning Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Deep Learning Academy?
Du behöver inga förkunskaper. Utbildningen i Deep Learning Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Läsa och nollställa .grad”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Deep Learning Academy-lektionen?
Ja. Varje Deep Learning Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- requires_grad och beräkningsgrafen
- Anropa backward() för att få gradienter
- Läsa och nollställa .grad
- torch.no_grad() för inferens