Huấn luyện và đánh giá RNN

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Hàm mất mát MSE

  • Lỗi:

    $$prediction - target$$

  • Bình phương lỗi:

    $$(prediction - target)^2$$

  • Sai số bình phương trung bình (MSE):

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

Bình phương hóa lỗi:

  • Tránh cộng dồn dương và âm triệt tiêu nhau
  • Phạt lỗi lớn mạnh hơn
  • Trong PyTorch:
      criterion = nn.MSELoss()
    
Deep Learning nâng cao với PyTorch

Mở rộng tensor

  • Lớp hồi quy nhận đầu vào dạng (batch_size, seq_length, num_features)
  • Ta có (batch_size, seq_length)
  • Cần thêm một chiều ở cuối
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 nâng cao với PyTorch

Thu gọn tensor

  • Ở vòng đánh giá, cần hoàn tác việc reshape đã làm khi huấn luyện
  • Nhãn có dạng (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • Đầu ra mô hình là (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • Kích thước đầu ra và nhãn phải khớp cho hàm loss
  • Có thể bỏ chiều cuối của đầu ra

    out = net(seqs).squeeze()
    
    torch.Size([32])
    
Deep Learning nâng cao với PyTorch

Vòng lặp huấn luyện

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()
  • Khởi tạo mô hình, định nghĩa loss & optimizer
  • Lặp qua epoch và batch dữ liệu
  • Định hình lại chuỗi đầu vào
  • Phần còn lại: như thường lệ
Deep Learning nâng cao với PyTorch

Vòng lặp đánh giá

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
  • Thiết lập metric MSE
  • Duyệt dữ liệu test không tính gradient
  • Định hình lại đầu vào
  • Squeeze đầu ra
  • Cập nhật metric
  • Tính giá trị cuối cùng
Deep Learning nâng cao với PyTorch

LSTM vs. GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • Ưu tiên GRU: kết quả tương đương hoặc tốt hơn với ít tài nguyên hơn
Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...