Pourquoi avons-nous besoin d'appeler zero_grad() dans PyTorch?
La méthode zero_grad()
doit être appelé au cours de la formation. Mais le la documentation n'est pas très utile
| zero_grad(self)
| Sets gradients of all model parameters to zero.
Pourquoi devons-nous appeler cette méthode?
Vous devez vous connecter pour publier un commentaire.
Dans
PyTorch
, nous avons besoin de définir les gradients à zéro avant de commencer à faire backpropragation parce que PyTorch accumule les gradients sur les arrière passe. C'est pratique pendant la formation RNNs. Ainsi, l'action par défaut est de s'accumulent (c'est à dire la somme) les gradients sur chaqueloss.backward()
appel.À cause de cela, lorsque vous démarrez votre formation en boucle, idéalement, vous devriez
zéro les gradients
de sorte que vous ne le paramètre de mise à jour correctement. Sinon le gradient serait point dans quelque autre direction que la direction vers le minimum (ou maximum, dans le cas de la maximisation des objectifs).Voici un exemple simple:
Alternativement, si vous êtes en train de faire un vanille descente de gradient, puis:
Note: Le accumulation (c'est à dire somme) des gradients de se produire lorsque
.vers l'arrière()
est appelée sur leperte
tenseur.