Antrenarea și evaluarea RNN-urilor

Deep Learning intermediar cu PyTorch

Michal Oleszak

Machine Learning Engineer

Pierderea prin eroare pătratică medie

  • Eroare:

    $$prediction - target$$

  • Eroare pătratică:

    $$(prediction - target)^2$$

  • Eroare pătratică medie:

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

Ridicarea la pătrat a erorii:

  • Împiedică anularea erorilor pozitive și negative
  • Penalizează erorile mari mai mult
  • În PyTorch:
      criterion = nn.MSELoss()
    
Deep Learning intermediar cu PyTorch

Extinderea tensorilor

  • Straturile recurente acceptă forma de intrare (batch_size, seq_length, num_features)
  • Avem (batch_size, seq_length)
  • Trebuie să adăugăm o dimensiune la final
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 intermediar cu PyTorch

Comprimarea tensorilor

  • În bucla de evaluare, trebuie să anulăm redimensionarea din bucla de antrenare
  • Etichetele au forma (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • Ieșirile modelului au forma (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • Formele ieșirilor modelului și ale etichetelor trebuie să corespundă pentru funcția de pierdere
  • Putem elimina ultima dimensiune din ieșirile modelului

    out = net(seqs).squeeze()
    
    torch.Size([32])
    
Deep Learning intermediar cu PyTorch

Bucla de antrenare

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()
  • Instanțiați modelul, definiți pierderea și optimizatorul
  • Iterați peste epoci și loturi de date
  • Redimensionați secvența de intrare
  • Restul: ca de obicei
Deep Learning intermediar cu PyTorch

Bucla de evaluare

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
  • Configurați metrica MSE
  • Iterați prin datele de test fără gradienți
  • Redimensionați intrările modelului
  • Comprimați ieșirile modelului
  • Actualizați metrica
  • Calculați valoarea finală a metricii
Deep Learning intermediar cu PyTorch

LSTM vs. GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • GRU preferat: rezultate similare sau mai bune cu mai puțină putere de calcul
Deep Learning intermediar cu PyTorch

Să exersăm!

Deep Learning intermediar cu PyTorch

Preparing Video For Download...