Optimizers, training en evaluatie

Gevorderde Deep Learning met PyTorch

Michal Oleszak

Machine Learning Engineer

Trainingslus

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()
  • Definieer lossfunctie en optimizer
    • BCELoss voor binaire classificatie
    • SGD-optimizer
  • Loop over epochs en train-batches
  • Maak gradients leeg
  • Forward pass: haal modeloutputs op
  • Bereken loss
  • Bereken gradients
  • Optimizerstap: update parameters
Gevorderde Deep Learning met PyTorch

Hoe een optimizer werkt

 

Twee vectoren van lengte twee: één met parameterwaarden (1 en 0,5), een andere met gradients (0,9 en -0,2).

Gevorderde Deep Learning met PyTorch

Hoe een optimizer werkt

 

Pijlen tonen hoe de twee vectoren met parameters en gradients naar de optimizer gaan, getekend als een schietschijf.

Gevorderde Deep Learning met PyTorch

Hoe een optimizer werkt

 

Een pijl vanuit de optimizer wijst naar een vector met twee parameterupdates: -0,5 en 0,5.

Gevorderde Deep Learning met PyTorch

Hoe een optimizer werkt

 

Pijlen van parameterupdates wijzen naar de bijgewerkte waarden van de parameters: 0,5 en 1,0

Gevorderde Deep Learning met PyTorch

Hoe een optimizer werkt

 

Pijlen van parameterupdates wijzen naar de bijgewerkte waarden van de parameters: 0,5 en 1,0

Gevorderde Deep Learning met PyTorch

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Update hangt af van learning rate
  • Simpel en efficiënt, voor basismodellen
  • Zelden gebruikt in de praktijk
Gevorderde Deep Learning met PyTorch

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Past de learning rate per parameter aan
  • Goed voor sparse data
  • Kan de learning rate te snel verlagen
Gevorderde Deep Learning met PyTorch

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Update per parameter op basis van de grootte van eerdere gradients
Gevorderde Deep Learning met PyTorch

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Waarschijnlijk de meest veelzijdige en meest gebruikte
  • RMSprop + gradientmomentum
  • Vaak de standaardkeuze
Gevorderde Deep Learning met PyTorch

Modelevaluatie

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
  • Zet accuracy-metriek op
  • Zet model in eval-modus en loop over testbatches zonder gradients
  • Geef data aan model voor voorspelde kansen
  • Bepaal voorspelde labels
  • Update accuracy-metriek
Gevorderde Deep Learning met PyTorch

Laten we oefenen!

Gevorderde Deep Learning met PyTorch

Preparing Video For Download...