Đánh giá mô hình đa đầu ra và cân trọng số loss

Deep Learning nâng cao với PyTorch

Michal Oleszak

Machine Learning Engineer

Đánh giá mô hình

acc_alpha = Accuracy(
    task="multiclass", num_classes=30
)
acc_char = Accuracy(
    task="multiclass", num_classes=964
)


net.eval() with torch.no_grad(): for images, labels_alpha, labels_char \ in dataloader_test: out_alpha, out_char = net(images)
_, pred_alpha = torch.max(out_alpha, 1) _, pred_char = torch.max(out_char, 1)
acc_alpha(pred_alpha, labels_alpha) acc_char(pred_char, labels_char)
  • Thiết lập metric cho từng đầu ra
  • Lặp qua test loader và lấy outputs
  • Tính dự đoán cho từng đầu ra
  • Cập nhật accuracy metrics
  • Tính điểm accuracy cuối cùng
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
Deep Learning nâng cao với PyTorch

Vòng lặp huấn luyện đa đầu ra (ôn lại)

for epoch in range(10):
    for images, labels_alpha, labels_char \
    in dataloader_train:
        optimizer.zero_grad()
        outputs_alpha, outputs_char = net(images)
        loss_alpha = criterion(
          outputs_alpha, labels_alpha
        )
        loss_char = criterion(
          outputs_char, labels_char
        )
        loss = loss_alpha + loss_char
        loss.backward()
        optimizer.step()
  • Hai loss: cho alphabet và character
  • Loss cuối: tổng hai loss: loss = loss_alpha + loss_char
  • Coi hai bài toán phân loại quan trọng như nhau
Deep Learning nâng cao với PyTorch

Thay đổi mức độ quan trọng giữa tác vụ

Phân loại ký tự quan trọng gấp 2 lần phân loại bảng chữ cái

  • Cách 1: Nhân loss quan trọng hơn với hệ số 2

    loss = loss_alpha + loss_char * 2
    
  • Cách 2: Gán trọng số tổng bằng 1

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
Deep Learning nâng cao với PyTorch

Cảnh báo: loss ở các thang đo khác nhau

  • Các loss phải cùng thang đo trước khi gán trọng số và cộng
  • Ví dụ tác vụ:

    • Dự đoán giá nhà -> loss MSE
    • Dự đoán chất lượng: thấp, trung bình, cao -> loss CrossEntropy
  • CrossEntropy thường ở một chữ số

  • Loss MSE có thể tới hàng chục nghìn
  • Mô hình sẽ bỏ qua tác vụ đánh giá chất lượng
  • Giải pháp: Chuẩn hóa cả hai loss trước khi gán trọng số và cộng
    loss_price = loss_price / torch.max(loss_price)
    loss_quality = loss_quality / torch.max(loss_quality)
    loss = 0.7 * loss_price + 0.3 * loss_quality
    
Deep Learning nâng cao với PyTorch

Ayo berlatih!

Deep Learning nâng cao với PyTorch

Preparing Video For Download...