Optymalizatory, trening i ewaluacja

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Michal Oleszak

Machine Learning Engineer

Pętla treningowa

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()
  • Zdefiniowanie funkcji straty i optymalizatora
    • BCELoss dla klasyfikacji binarnej
    • Optymalizator SGD
  • Iteracja po epokach i batchach treningowych
  • Zerowanie gradientów
  • Przepustka wprzód: pobranie wyjść modelu
  • Obliczenie straty
  • Obliczenie gradientów
  • Krok optymalizatora: aktualizacja parametrów
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Jak działa optymalizator

 

Dwa wektory o długości dwa: jeden z wartościami parametrów (1 i 0.5), drugi z gradientami (0.9 i -0.2).

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Jak działa optymalizator

 

Strzałki pokazują, jak dwa wektory z parametrami i gradientami są przekazywane do optymalizatora, przedstawionego jako tarcza strzelnicza.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Jak działa optymalizator

 

Strzałka od optymalizatora wskazuje wektor z dwiema aktualizacjami parametrów: -0.5 i 0.5.

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Jak działa optymalizator

 

Strzałka od aktualizacji parametrów wskazuje zaktualizowane wartości parametrów: 0.5 i 1.0

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Jak działa optymalizator

 

Strzałka od aktualizacji parametrów wskazuje zaktualizowane wartości parametrów: 0.5 i 1.0

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Stochastic Gradient Descent (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Aktualizacja zależy od współczynnika uczenia
  • Prosty i wydajny, dla podstawowych modeli
  • Rzadko stosowany w praktyce
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Dostosowuje współczynnik uczenia dla każdego parametru
  • Dobry dla rzadkich danych
  • Może zbyt szybko zmniejszać współczynnik uczenia
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Aktualizacja każdego parametru zależy od rozmiaru poprzednich gradientów
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Najbardziej wszechstronny i powszechnie stosowany
  • RMSprop + momentum gradientu
  • Często stosowany jako domyślny optymalizator
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Ewaluacja 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
  • Konfiguracja metryki dokładności
  • Przełączenie modelu w tryb ewaluacji i iteracja po batchach testowych bez gradientów
  • Przekazanie danych do modelu w celu uzyskania prawdopodobieństw
  • Obliczenie przewidywanych etykiet
  • Aktualizacja metryki dokładności
Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Czas na ćwiczenia!

Głębokie uczenie z PyTorch – poziom średnio zaawansowany

Preparing Video For Download...