การประเมินโมเดลหลายเอาต์พุตและการถ่วงน้ำหนัก loss

Deep Learning ระดับกลางด้วย PyTorch

Michal Oleszak

Machine Learning Engineer

การประเมินโมเดล

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)
  • กำหนด metric สำหรับแต่ละเอาต์พุต
  • วนซ้ำผ่าน test loader และรับเอาต์พุต
  • คำนวณค่าพยากรณ์สำหรับแต่ละเอาต์พุต
  • อัปเดต accuracy metrics
  • คำนวณค่า accuracy สุดท้าย
print(f"Alphabet: {acc_alpha.compute()}")
print(f"Character: {acc_char.compute()}")
Alphabet: 0.3166305720806122
Character: 0.24064336717128754
Deep Learning ระดับกลางด้วย PyTorch

ทบทวน training loop แบบหลายเอาต์พุต

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()
  • มี loss 2 ค่า: สำหรับ alphabet และ character
  • กำหนด loss รวมเป็นผลบวกของทั้งสอง: loss = loss_alpha + loss_char
  • ถือว่าทั้งสองงาน classification มีความสำคัญเท่ากัน
Deep Learning ระดับกลางด้วย PyTorch

การปรับความสำคัญของแต่ละงาน

การจำแนก character สำคัญกว่าการจำแนก alphabet 2 เท่า

  • วิธีที่ 1: คูณ loss ที่สำคัญกว่าด้วยตัวคูณ 2

    loss = loss_alpha + loss_char * 2
    
  • วิธีที่ 2: กำหนดน้ำหนักที่รวมกันได้ 1

    loss = 0.33 * loss_alpha + 0.67 * loss_char
    
Deep Learning ระดับกลางด้วย PyTorch

ข้อควรระวัง: loss ที่มีสเกลต่างกัน

  • loss ทุกค่าต้องอยู่ในสเกลเดียวกันก่อนถ่วงน้ำหนักและนำมาบวกกัน
  • ตัวอย่างงาน:

    • พยากรณ์ราคาบ้าน -> MSE loss
    • พยากรณ์คุณภาพ: ต่ำ กลาง สูง -> CrossEntropy loss
  • CrossEntropy มักอยู่ในหลักหน่วย

  • MSE loss อาจสูงถึงหลักหมื่น
  • โมเดลจะละเลยงานประเมินคุณภาพ
  • วิธีแก้: Normalize loss ทั้งสองก่อนถ่วงน้ำหนักและนำมาบวกกัน
    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 ระดับกลางด้วย PyTorch

มาฝึกกันเถอะ!

Deep Learning ระดับกลางด้วย PyTorch

Preparing Video For Download...