[PYTHON] [PyTorch] ÜBERTRAGUNGSLERNEN FÜR COMPUTERVISION

Einführung

ÜBERTRAGUNGSLERNEN FÜR COMPUTER VISION STRUCT Was steht im Code von (1)? Ich habe einen Artikel geschrieben, weil ich zusammenfassen wollte, was ich dachte. Wenn Sie einen Fehler machen, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

optimizer.zero_grad()

Es ist eine Zeile in train_model function, aber es ist eine ziemlich wichtige Funktion, um die Akkumulation von Verläufen zu initialisieren. .. Wenn der Gradient ohne Initialisierung akkumuliert wird, konvergiert er nicht. Bei der Aktualisierung des Gewichts $ W $ basiert es auf der Methode des steilsten Abstiegs

W = W - \eta \frac{\partial L}{\partial W}

Von dieser Formel

\frac{\partial L}{\partial W}

Dieser Teil ist der Gradient. $ \ eta $ ist die Lernrate. Daher ist beim Lernen `optimizer.zero_grad ()` erforderlich.

set_grad_enabled() train_model function ist eine Funktion, die als with-Klausel bezeichnet wird. Als Ergebnis der Untersuchung, dass es ohne diese kein Problem mit der Berechnung gibt, Berechnungsdiagramm erstellen / 41240) In (2) sind Vorwärtsausbreitung und Rückwärtsausbreitung während des Lernens erforderlich, aber Rückwärtsausbreitung wird während der Auswertung nicht verwendet, so dass angenommen wird, dass der Zweck darin besteht, den Rechenaufwand zu verringern. Bezieht sich die Verwendung der with-Klausel auf die Sicherung des Speichers?

running_loss += loss.item() * inputs.size(0) Das erste Mal, wenn Sie es in der [train_model-Funktion] sehen (https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html#training-the-model)? Es ist eine Linie, die wird. An erster Stelle in der Definition der Verlustfunktion

criterion = nn.CrossEntropyLoss()
loss = criterion(outputs, labels)

Wenn Sie sich jedoch CrossEntropyLoss ansehen, lautet das Argument "Reduktion =" Mittelwert "" Es gibt. Mit anderen Worten, da der durchschnittliche Verlustwert standardmäßig zurückgegeben wird, gibt es kein Problem beim Batch-Lernen, aber beim Mini-Batch-Lernen ist es erforderlich, vom Durchschnittswert (Mittelwert) zur Summe (Summe) zu wechseln. Deshalb,

running_loss += loss.item() * inputs.size(0)

Der durchschnittliche Verlustwert einer kleinen und schwierigen Mini-Charge wird mit der Anzahl der Proben der Mini-Charge multipliziert, um sie auf den ursprünglichen Wert zurückzusetzen. Übrigens, auch wenn Sie das nicht tun

criterion = nn.CrossEntropyLoss(reduction='sum')

Gibt das gleiche Ergebnis zurück wie `` loss.item () * inputs.size (0) `. Damit

#running_loss += loss.item() * inputs.size(0)
running_loss += loss.item()

Sie können es gehorsam schreiben, ohne etwas Seltsames zu tun. Derzeit wird es auch in hier (3) erwähnt.

Nachtrag (2020/3/11)

criterion = nn.CrossEntropyLoss(reduction='sum')Nach dem Ermitteln des Verlustwertes mit führt die Rückausbreitung zu nan.[Fehler](https://github.com/pytorch/pytorch/issues/17350)(4)Es scheint zu geben.


 Seien Sie also vorsichtig. `` `Running_loss + = loss.item () * inputs.size (0)` `` Dies ist möglicherweise besser zu verwenden

## schließlich
 Ich werde mehr schreiben, wenn es mehr Orte gibt, über die man sich Sorgen machen muss.


## Referenzmaterial
(1) [TRANSFER LEARNING FOR COMPUTER VISION TUTORIAL](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html?highlight=transfer%20learning)
(2) [Why we need torch.set_grad_enabled(False) here?](https://discuss.pytorch.org/t/why-we-need-torch-set-grad-enabled-false-here/41240)
(3) [Issue about updating training loss #2](https://github.com/udacity/deep-learning-v2-pytorch/issues/2)
(4) [torch.nn.CrossEntropyLoss with "reduction" sum/mean is not deterministic on segmentation outputs / labels #17350](https://github.com/pytorch/pytorch/issues/17350)


Recommended Posts

[PyTorch] ÜBERTRAGUNGSLERNEN FÜR COMPUTERVISION
Stärkung des Lernens der dritten Zeile
Datensatzvorbereitung für PyTorch
Zusammenfassung zum Lernen von RAPIDS
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Lernablauf für Python-Anfänger
Python-Lernplan für KI-Lernen
Implementieren Sie Style Transfer mit Pytorch
Memorandum für mich lernen w
Deep Learning für die Bildung von Verbindungen?
Maschinelles Lernen Minesweeper mit PyTorch
[PyTorch] Datenerweiterung zur Segmentierung
Checkios Empfehlung zum Erlernen von Python
Maschinelles Lernen mit Docker (42) Programmieren von PyTorch für Deep Learning Von Ian Pointer