Навчання та оцінювання RNN

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

Michal Oleszak

Machine Learning Engineer

Функція втрат MSE

  • Помилка:

    $$prediction - target$$

  • Квадратична помилка:

    $$(prediction - target)^2$$

  • Середня квадратична помилка:

    $$avg[(prediction - target)^2]$$

Піднесення помилки до квадрата:

  • Не дає додатним і від'ємним помилкам занулитися
  • Сильніше штрафує великі помилки
  • У PyTorch:
      criterion = nn.MSELoss()
    
Середній рівень Deep Learning з PyTorch

Розширення тензорів

  • Рекурентні шари очікують вхід форми (batch_size, seq_length, num_features)
  • Ми маємо (batch_size, seq_length)
  • Потрібно додати вимір у кінці
for seqs, labels in dataloader_train:
    print(seqs.shape)
torch.Size([32, 96])
seqs = seqs.view(32, 96, 1)
print(seqs.shape)
torch.Size([32, 96, 1])
Середній рівень Deep Learning з PyTorch

Стискання тензорів

  • В циклі оцінювання треба скасувати зміни форми з тренувального циклу
  • Мітки мають форму (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • Виходи моделі мають форму (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • Форми виходів моделі та міток мають збігатися для функції втрат
  • Можна прибрати останній вимір у виходах моделі

    out = net(seqs).squeeze()
    
    torch.Size([32])
    
Середній рівень Deep Learning з PyTorch

Тренувальний цикл

net = Net()
criterion = nn.MSELoss()
optimizer = optim.Adam(
  net.parameters(), lr=0.001
)


for epoch in range(num_epochs): for seqs, labels in dataloader_train:
seqs = seqs.view(32, 96, 1)
outputs = net(seqs) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step()
  • Створіть модель, визначте втрати й оптимізатор
  • Ітеруйте за епохами та пакетами даних
  • Змініть форму вхідної послідовності
  • Далі — як зазвичай
Середній рівень Deep Learning з PyTorch

Цикл оцінювання

mse = torchmetrics.MeanSquaredError()


net.eval() with torch.no_grad(): for seqs, labels in test_loader:
seqs = seqs.view(32, 96, 1)
outputs = net(seqs).squeeze()
mse(outputs, labels)
print(f"Test MSE: {mse.compute()}")
Test MSE: 0.13292162120342255
  • Налаштуйте метрику MSE
  • Пройдіть тестові дані без градієнтів
  • Змініть форму входів моделі
  • Стисніть виходи моделі
  • Оновлюйте метрику
  • Обчисліть фінальне значення
Середній рівень Deep Learning з PyTorch

LSTM vs. GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • Краще GRU: ті самі або кращі результати за меншої обчислювальної потужності
Середній рівень Deep Learning з PyTorch

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

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

Preparing Video For Download...