RNN'leri eğitme ve değerlendirme

PyTorch ile Orta Düzey Deep Learning

Michal Oleszak

Machine Learning Engineer

Ortalama Kare Hata (MSE) Kaybı

  • Hata:

    $$prediction - target$$

  • Kare Hata:

    $$(prediction - target)^2$$

  • Ortalama Kare Hata:

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

Hatanın karesi almak:

  • Pozitif ve negatif hataların birbirini götürmesini engeller
  • Büyük hataları daha çok cezalandırır
  • PyTorch'ta:
      criterion = nn.MSELoss()
    
PyTorch ile Orta Düzey Deep Learning

Tensörleri genişletme

  • Yinelenen katmanlar girdi şeklini (batch_size, seq_length, num_features) bekler
  • Bizde (batch_size, seq_length) var
  • Sona bir boyut eklemeliyiz
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])
PyTorch ile Orta Düzey Deep Learning

Tensörleri sıkıştırma

  • Değerlendirme döngüsünde, eğitimde yapılan yeniden şekillendirmeyi tersine çevirmek gerekir
  • Etiketlerin şekli (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • Model çıktıları (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • Kayıp için çıktı ve etiket şekilleri eşleşmelidir
  • Çıktıların son boyutunu atabiliriz

    out = net(seqs).squeeze()
    
    torch.Size([32])
    
PyTorch ile Orta Düzey Deep Learning

Eğitim döngüsü

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()
  • Modeli oluşturun, kayıp ve optimize ediciyi tanımlayın
  • Epoch'lar ve veri kümeleri üzerinde yineleyin
  • Girdi dizisini yeniden şekillendirin
  • Geri kalanı: her zamanki gibi
PyTorch ile Orta Düzey Deep Learning

Değerlendirme döngüsü

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 metriğini kurun
  • Test verisinde gradientsiz yineleyin
  • Model girdilerini yeniden şekillendirin
  • Çıktıları sıkıştırın (squeeze)
  • Metriği güncelleyin
  • Son metriki hesaplayın
PyTorch ile Orta Düzey Deep Learning

LSTM ve GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • GRU tercih edilir: daha az işlem gücüyle benzer ya da daha iyi sonuçlar
PyTorch ile Orta Düzey Deep Learning

Hadi pratik yapalım!

PyTorch ile Orta Düzey Deep Learning

Preparing Video For Download...