Оптимізатори, тренування та оцінювання

Середній рівень Deep Learning з PyTorch

Michal Oleszak

Machine Learning Engineer

Цикл тренування

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()
  • Визначте функцію втрат і оптимізатор
    • BCELoss для бінарної класифікації
    • Оптимізатор SGD
  • Ітеруйте за епохами та тренувальними батчами
  • Обнуліть градієнти
  • Прямий прохід: отримайте виходи моделі
  • Обчисліть втрати
  • Обчисліть градієнти
  • Крок оптимізатора: оновіть параметри
Середній рівень Deep Learning з PyTorch

Як працює оптимізатор

 

Два вектори довжини два: один із значеннями параметрів (1 та 0.5), інший — з градієнтами (0.9 та -0.2).

Середній рівень Deep Learning з PyTorch

Як працює оптимізатор

 

Стрілки показують, як два вектори з параметрами та градієнтами передаються в оптимізатор, зображений як мішень.

Середній рівень Deep Learning з PyTorch

Як працює оптимізатор

 

Стрілка від оптимізатора вказує на вектор із двома оновленнями параметрів: -0.5 і 0.5.

Середній рівень Deep Learning з PyTorch

Як працює оптимізатор

 

Стрілки від оновлень параметрів вказують на оновлені значення параметрів: 0.5 і 1.0

Середній рівень Deep Learning з PyTorch

Як працює оптимізатор

 

Стрілки від оновлень параметрів вказують на оновлені значення параметрів: 0.5 і 1.0

Середній рівень Deep Learning з PyTorch

Стохастичний градієнтний спуск (SGD)

optimizer = optim.SGD(net.parameters(), lr=0.01)
  • Оновлення залежить від швидкості навчання
  • Простий і ефективний для базових моделей
  • Рідко використовується на практиці
Середній рівень Deep Learning з PyTorch

Adaptive Gradient (Adagrad)

optimizer = optim.Adagrad(net.parameters(), lr=0.01)
  • Підлаштовує швидкість навчання для кожного параметра
  • Добрий для розріджених даних
  • Може надто швидко зменшувати швидкість навчання
Середній рівень Deep Learning з PyTorch

Root Mean Square Propagation (RMSprop)

optimizer = optim.RMSprop(net.parameters(), lr=0.01)
  • Оновлює кожен параметр з урахуванням розміру попередніх градієнтів
Середній рівень Deep Learning з PyTorch

Adaptive Moment Estimation (Adam)

optimizer = optim.Adam(net.parameters(), lr=0.01)
  • Мабуть, най універсальніший і найуживаніший
  • RMSprop + момент градієнта
  • Часто «оптимізатор за замовчуванням»
Середній рівень Deep Learning з PyTorch

Оцінювання моделі

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
  • Налаштуйте метрику точності
  • Переведіть модель у режим eval і пройдіть батчі тестових даних без градієнтів
  • Передайте дані в модель, щоб отримати ймовірності
  • Обчисліть передбачені мітки
  • Оновіть метрику точності
Середній рівень Deep Learning з PyTorch

Давайте потренуємось!

Середній рівень Deep Learning з PyTorch

Preparing Video For Download...