Optimalizátory, trénování a vyhodnocení

Intermediate Deep Learning with PyTorch

Michal Oleszak

Machine Learning Engineer

Trénovací smyčka

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()
  • Definujte ztrátovou funkci a optimalizátor
    • BCELoss pro binární klasifikaci
    • Optimalizátor SGD
  • Iterujte přes epochy a trénovací dávky
  • Vynulujte gradienty
  • Dopředný průchod: získejte výstupy modelu
  • Vypočítejte ztrátu
  • Vypočítejte gradienty
  • Krok optimalizátoru: aktualizujte parametry
Intermediate Deep Learning with PyTorch

Jak funguje optimalizátor

 

Dva vektory délky dvě: jeden s hodnotami parametrů (1 a 0,5), druhý s gradienty (0,9 a -0,2).

Intermediate Deep Learning with PyTorch

Jak funguje optimalizátor

 

Šipky znázorňují, jak jsou oba vektory s parametry a gradienty předány do optimalizátoru, zobrazeného jako terč.

Intermediate Deep Learning with PyTorch

Jak funguje optimalizátor

 

Šipka z optimalizátoru ukazuje na vektor se dvěma aktualizacemi parametrů: -0,5 a 0,5.

Intermediate Deep Learning with PyTorch

Jak funguje optimalizátor

 

Šipka od aktualizací parametrů ukazuje na aktualizované hodnoty parametrů: 0,5 a 1,0

Intermediate Deep Learning with PyTorch

Jak funguje optimalizátor

 

Šipka od aktualizací parametrů ukazuje na aktualizované hodnoty parametrů: 0,5 a 1,0

Intermediate Deep Learning with PyTorch

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Aktualizace závisí na rychlosti učení
  • Jednoduchý a efektivní, pro základní modely
  • V praxi se používá zřídka
Intermediate Deep Learning with PyTorch

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Přizpůsobuje rychlost učení pro každý parametr
  • Vhodný pro řídká data
  • Rychlost učení může klesat příliš rychle
Intermediate Deep Learning with PyTorch

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Aktualizace každého parametru na základě velikosti předchozích gradientů
Intermediate Deep Learning with PyTorch

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Pravděpodobně nejuniverzálnější a nejrozšířenější
  • RMSprop + hybnost gradientu
  • Často používán jako výchozí optimalizátor
Intermediate Deep Learning with PyTorch

Vyhodnocení modelu

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
  • Nastavte metriku přesnosti
  • Přepněte model do režimu vyhodnocení a iterujte přes testovací dávky bez gradientů
  • Předejte data modelu pro získání předpovězených pravděpodobností
  • Vypočítejte předpovězené štítky
  • Aktualizujte metriku přesnosti
Intermediate Deep Learning with PyTorch

Pojďme si procvičit!

Intermediate Deep Learning with PyTorch

Preparing Video For Download...