Optimizer, Training und Evaluation

Deep Learning mit PyTorch für Fortgeschrittene

Michal Oleszak

Machine Learning Engineer

Training-Loop

import torch.nn as nn
import torch.optim as optim

criterion = nn.BCELoss()
optimizer = optim.SGD(net.parameters(), lr=0.01)


for epoch in range(1000): for features, labels in dataloader_train:
optimizer.zero_grad()
outputs = net(features)
loss = criterion( outputs, labels.view(-1, 1) )
loss.backward()
optimizer.step()
  • Loss-Funktion und Optimizer festlegen
    • BCELoss für binäre Klassifikation
    • SGD-Optimizer
  • Über Epochen und Trainingsbatches iterieren
  • Gradienten zurücksetzen
  • Forward-Pass: Modelloutputs holen
  • Loss berechnen
  • Gradienten berechnen
  • Optimizer-Schritt: Parameter updaten
Deep Learning mit PyTorch für Fortgeschrittene

Wie ein Optimizer arbeitet

 

Zwei Vektoren der Länge zwei: einer mit Parameterwerten (1 und 0,5), ein anderer mit Gradienten (0,9 und -0,2).

Deep Learning mit PyTorch für Fortgeschrittene

Wie ein Optimizer arbeitet

 

Pfeile zeigen, wie die beiden Vektoren mit Parametern und Gradienten in den Optimizer (als Zielscheibe gezeichnet) gehen.

Deep Learning mit PyTorch für Fortgeschrittene

Wie ein Optimizer arbeitet

 

Ein Pfeil vom Optimizer zeigt auf einen Vektor mit zwei Parameter-Updates: -0,5 und 0,5.

Deep Learning mit PyTorch für Fortgeschrittene

Wie ein Optimizer arbeitet

 

Pfeile von Parameter-Updates zeigen auf die aktualisierten Parameterwerte: 0,5 und 1,0

Deep Learning mit PyTorch für Fortgeschrittene

Wie ein Optimizer arbeitet

 

Pfeile von Parameter-Updates zeigen auf die aktualisierten Parameterwerte: 0,5 und 1,0

Deep Learning mit PyTorch für Fortgeschrittene

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Update hängt von der Lernrate ab
  • Einfach und effizient für Basismodelle
  • In der Praxis selten genutzt
Deep Learning mit PyTorch für Fortgeschrittene

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Passt die Lernrate je Parameter an
  • Gut für spärliche Daten
  • Lernrate kann zu schnell sinken
Deep Learning mit PyTorch für Fortgeschrittene

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Update je Parameter basierend auf der Größe früherer Gradienten
Deep Learning mit PyTorch für Fortgeschrittene

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Wohl am vielseitigsten und am weitesten verbreitet
  • RMSprop + Gradientenmomentum
  • Oft der Standard-Optimizer
Deep Learning mit PyTorch für Fortgeschrittene

Modellevaluierung

from torchmetrics import Accuracy

acc = Accuracy(task="binary")


net.eval() with torch.no_grad(): for features, labels in dataloader_test:
outputs = net(features)
preds = (outputs >= 0.5).float()
acc(preds, labels.view(-1, 1))
accuracy = acc.compute() print(f"Accuracy: {accuracy}")
Accuracy: 0.6759443283081055
  • Accuracy-Metrik einrichten
  • Modell in Eval-Modus und über Testbatches ohne Gradienten iterieren
  • Daten ins Modell: vorhergesagte Wahrscheinlichkeiten holen
  • Vorhersage-Labels berechnen
  • Accuracy-Metrik updaten
Deep Learning mit PyTorch für Fortgeschrittene

Lass uns üben!

Deep Learning mit PyTorch für Fortgeschrittene

Preparing Video For Download...