Çok çıkışlı modellerin değerlendirilmesi ve kayıp ağırlığı

PyTorch ile Orta Düzey Deep Learning

Michal Oleszak

Machine Learning Engineer

Model değerlendirme

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)
  • Her çıktı için metrik kurun
  • Test yükleyicisinde dönün ve çıktıları alın
  • Her çıkış için tahmin hesaplayın
  • Doğruluk metriklerini güncelleyin
  • Son doğruluk puanlarını hesaplayın
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
PyTorch ile Orta Düzey Deep Learning

Çok çıkışlı eğitim döngüsüne yeniden bakış

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()
  • İki kayıp: alfabeler ve karakterler için
  • Nihai kayıp, alfabet ve karakter kayıplarının toplamıdır: loss = loss_alpha + loss_char
  • Her iki sınıflandırma görevi eşit önemde kabul edilir
PyTorch ile Orta Düzey Deep Learning

Görev önemini değiştirme

Karakter sınıflandırma, alfabet sınıflandırmadan 2 kat daha önemli

  • Yaklaşım 1: Daha önemli kaybı 2 ile çarpın

    loss = loss_alpha + loss_char * 2
    
  • Yaklaşım 2: Toplamı 1 olan ağırlıklar verin

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
PyTorch ile Orta Düzey Deep Learning

Uyarı: farklı ölçeklerde kayıplar

  • Ağırlıklandırıp toplamadan önce kayıplar aynı ölçekte olmalıdır
  • Örnek görevler:

    • Ev fiyatı tahmini -> MSE kaybı
    • Kalite tahmini: düşük, orta, yüksek -> CrossEntropy kaybı
  • CrossEntropy genellikle tek hanelidir

  • MSE kaybı on binlere çıkabilir
  • Model kalite görevini yok sayar
  • Çözüm: Ağırlıklandırmadan ve toplamadan önce her iki kaybı da normalleştirin
    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
    
PyTorch ile Orta Düzey Deep Learning

Haydi pratik yapalım!

PyTorch ile Orta Düzey Deep Learning

Preparing Video For Download...