Warum müssen wir Zero_grad () explizit auf Optimizer aufrufen? [geschlossen]

8

Warum müssen wir in pytorch explizit null Gradienten machen? Warum können Gradienten nicht auf Null gesetzt werden, wenn loss.backward() aufgerufen wird. In welchem ​​Szenario werden die Gradienten im Diagramm beibehalten und der Benutzer aufgefordert, die Gradienten explizit auf Null zu setzen?

Ich suche nach einer guten Erklärung.

    
Wasi Ahmad 24.06.2017, 02:39
quelle

2 Antworten

9

Meine Meinung ist nach loss.backward() , wir müssen optimizer.step() verwenden, um mit Gradientenabstieg fortzufahren, also ist der Gradient reserviert, da die 2 Operationen getrennt sind.

Außerdem müssen wir manchmal zwischen einigen Stapeln einen Gradienten akkumulieren, wir können einfach mehrfach rückwärts gehen und einmal optimieren.

    
danche 24.06.2017, 02:51
quelle
1

Ich habe einen Anwendungsfall für das aktuelle Setup in PyTorch. Wenn man ein rekurrentes neuronales Netzwerk verwendet, das bei jedem Schritt Vorhersagen macht, möchte man vielleicht einen Hyperparameter haben, der es erlaubt, Gradienten in der Zeit zu akkumulieren. Das Nicht-Nullstellen der Gradienten in jedem Zeitschritt ermöglicht es, die Rückwärts-Fortpflanzung durch die Zeit (bptt) auf interessante und neuartige Weise zu verwenden. Wenn Sie mehr Informationen über bptt oder wiederkehrende neuronale Netze möchten, lesen Sie Zurück prop oder RNN

    
twrichar 18.10.2017 23:05
quelle

Tags und Links