Deep Learning Academy · Oppitunti

.grad-arvojen lukeminen ja nollaaminen

Miksi gradientit kertyvät ja ne on nollattava

Oppitunti 3/413 vaihetta

.grad-arvojen lukeminen ja nollaaminen on ilmainen Deep Learning Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Deep Learning Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Deep Learning Academy-kurssilla on yhteensä 4 oppituntia.

.grad-attribuutti

Backward-kutsun jälkeen jokainen koulutettava tensori tallentaa gradienttinsa .grad-kenttään. Sen lukeminen kertoo, miten loss reagoi kyseisen tensorin muutoksiin.

print(weight.grad)

Gradientit alkavat arvosta None

Ennen ensimmäistä backward-kutsua .grad on None, ei nolla. PyTorch varaa sille tilan vasta, kun ensimmäiset gradientit todella saapuvat.

Gradientit kertyvät

Tässä on yllätys: backward lisää gradientit .grad-kentän aiempaan arvoon sen sijaan, että korvaisi sen. Jos kutsut backwardia kahdesti tyhjentämättä kenttää, luvut kasaantuvat.

Miksi gradientit kertyvät

Tämä lisäävä toiminta on tarkoituksellista. Sen avulla voit summata useiden mini-batchien gradientit ennen yhtä päivitystä, mikä on kätevää suuremman batchin jäljittelemisessä.

Piilevä virhe

Jos unohdat tyhjentää gradientit, vanhat gradientit vääristävät seuraavaa vaihetta, jolloin malli koulutetaan väärillä luvuilla. Tämä huomaamaton bugi yllättää melkein kaikki ainakin kerran.

Nollaa ne jokaisessa vaiheessa

Ratkaisu on nollata gradientit ennen jokaista backward-kutsua. Optimointialgoritmin kanssa kutsut yksinkertaisesti zero_grad()-metodia jokaisen koulutusvaiheen alussa.

optimizer.zero_grad()

Oikea järjestys

Silmukan järjestys on aina sama: zero_grad, forward, loss, backward, step. Ensin tehtävä nollaus varmistaa, että jokaisessa vaiheessa käytetään vain nykyisen batchin gradientteja.

optimizer.zero_grad()
loss.backward()
optimizer.step()

Tyhjennys ilman optimointialgoritmia

Eikö optimointialgoritmia ole vielä? Voit tyhjentää gradientit itse asettamalla kunkin tensorin .grad-kentän takaisin arvoon None ennen seuraavaa backward-kutsua.

w.grad = None

set_to_none säästää resursseja

Uudemmassa koodissa suositaan muotoa zero_grad(set_to_none=True). Kun gradienteille asetetaan arvoksi None nollien täyttämisen sijaan, muistia ja aikaa säästyy hieman.

Gradienttien lukeminen virheenkorjausta varten

.grad-kentän tarkistaminen on erinomainen tapa etsiä virheitä. Pelkät nollat voivat tarkoittaa kuollutta neuronia, ja valtavat arvot varoittavat räjähtävistä gradienteista ennen kuin koulutus hajoaa.

Hyvä tapa omaksua

Ota gradienttien nollaaminen automaattiseksi tavaksi. Jokainen luotettava koulutussilmukka tyhjentää gradientit ensin, joten malli oppii aina vain nykyisestä batchista.

Pikatarkistus

Tarkista, että ymmärrät kertymisen sudenkuopan.

Kertaus

Gradientit tallennetaan .grad-kenttään ja ne kertyvät backward-kutsujen välillä, joten ne on tyhjennettävä jokaisessa vaiheessa zero_grad-metodilla. Jos tämän unohtaa, koulutus häiriintyy huomaamatta. 🧹

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”.grad-arvojen lukeminen ja nollaaminen” ilmainen?

Kyllä – oppitunnin ”.grad-arvojen lukeminen ja nollaaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Deep Learning Academy-kurssin, päivitä CoddyKit PROhon. Deep Learning Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”.grad-arvojen lukeminen ja nollaaminen”?

Miksi gradientit kertyvät ja ne on nollattava Harjoittelet Deep Learning Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Deep Learning Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Deep Learning Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”.grad-arvojen lukeminen ja nollaaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Deep Learning Academy-oppitunnilla?

Kyllä. Jokainen Deep Learning Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. requires_grad ja laskentakaavio
  2. Kutsukaa backward() gradienttien saamiseksi
  3. .grad-arvojen lukeminen ja nollaaminen
  4. torch.no_grad() päättelyä varten
← Takaisin: Deep Learning Academy