Melatih dan mengevaluasi RNN

Deep Learning Lanjutan dengan PyTorch

Michal Oleszak

Machine Learning Engineer

Mean Squared Error Loss

  • Error:

    $$prediction - target$$

  • Squared Error:

    $$(prediction - target)^2$$

  • Mean Squared Error:

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

Mengkuadratkan error:

  • Mencegah error positif/negatif saling meniadakan
  • Lebih menghukum error besar
  • Di PyTorch:
      criterion = nn.MSELoss()
    
Deep Learning Lanjutan dengan PyTorch

Memperluas tensor

  • Layer rekuren mengharapkan bentuk input (batch_size, seq_length, num_features)
  • Kita punya (batch_size, seq_length)
  • Tambahkan satu dimensi di akhir
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 Lanjutan dengan PyTorch

Menyusutkan tensor

  • Di loop evaluasi, kita perlu mengembalikan reshaping yang dilakukan di loop training
  • Label berbentuk (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • Output model (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • Bentuk output model dan label harus cocok untuk fungsi loss
  • Kita bisa menghapus dimensi terakhir dari output model

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

Training loop

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()
  • Inisialisasi model, definisikan loss & optimizer
  • Iterasi atas epoch dan batch data
  • Ubah bentuk input sequence
  • Selebihnya: seperti biasa
Deep Learning Lanjutan dengan PyTorch

Evaluation loop

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
  • Siapkan metrik MSE
  • Iterasi data uji tanpa gradien
  • Ubah bentuk input model
  • Squeeze output model
  • Perbarui metrik
  • Hitung nilai akhir metrik
Deep Learning Lanjutan dengan PyTorch

LSTM vs. GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • GRU lebih disukai: hasil sama/lebih baik dengan daya komputasi lebih rendah
Deep Learning Lanjutan dengan PyTorch

Ayo berlatih!

Deep Learning Lanjutan dengan PyTorch

Preparing Video For Download...