CodeBlanks Logo Icon CodeBlanks

Loss

Loss, model tahmininin ne kadar yanlış olduğunu ölçer.

Kayıp fonksiyonları

Kayıp fonksiyonu problemin türüne göre seçilir:

  • nn.MSELoss: regresyon.
  • nn.CrossEntropyLoss: çok sınıflı sınıflandırma; ham logitleri ve tam sayı etiketleri alır, softmax'ı içeride yapar.
  • nn.BCEWithLogitsLoss: ikili sınıflandırma; ham logit ve 0/1 ondalık etiket alır.
ce = nn.CrossEntropyLoss()
logit = torch.zeros(2, 3)              # her sınıfa eşit skor
print(round(ce(logit, torch.tensor([0, 2])).item(), 4))   # 1.0986 = log(3)

CrossEntropyLoss'a softmax uygulanmış olasılık vermek sık yapılan bir hatadır; sonuç çalışır ama yanlış öğrenir.

MSE ve ortalama

Kayıplar varsayılan olarak toplu veri üzerinden ortalama alır (reduction="mean"). "sum" toplamı, "none" örnek başına kayıpları verir; örnek ağırlıklandırma için yararlıdır:

mse = nn.MSELoss()
t = torch.tensor([1., 2., 3.])
g = torch.tensor([1., 4., 6.])
print(mse(t, g).item())                             # (0 + 4 + 9) / 3 = 4.333...
print(nn.MSELoss(reduction="none")(t, g).tolist())  # [0.0, 4.0, 9.0]

MSE'de tahmin ve hedefin şekli aynı olmalıdır; aksi halde yayınlama sessizce yanlış sonuç üretir.

Uygulama Kayıpları hesapla

Logitler sıfırken nn.CrossEntropyLoss() değerini (round(..., 4)) yazdır. Ardından doğru sınıfa 10, diğerlerine 0 logit veren tensör için kaybı round(..., 4) ile yazdır. Son olarak [1., 2., 3.] ile [1., 4., 6.] arasındaki reduction="sum" MSE'yi yazdır.

Başlangıç kodu

model.py
import torch
from torch import nn

ce = nn.CrossEntropyLoss()
y = torch.tensor([0, 2])

# buraya yaz

Örnek çözüm

model.py
import torch
from torch import nn

ce = nn.CrossEntropyLoss()
y = torch.tensor([0, 2])

print(round(ce(torch.zeros(2, 3), y).item(), 4))
iyi = torch.zeros(2, 3)
iyi[torch.arange(2), y] = 10.0
print(round(ce(iyi, y).item(), 4))
print(nn.MSELoss(reduction="sum")(torch.tensor([1., 2., 3.]), torch.tensor([1., 4., 6.])).item())

Beklenen çıktı

1.0986
0.0001
13.0

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 CrossEntropyLoss'a hangi girdi verilmelidir?

  • Softmax olasılıkları ve one-hot etiketler
  • Sigmoid çıktıları
  • Tahmin edilen sınıflar
  • Ham logitler ve int64 etiketler Doğru cevap

Açıklama: İçeride log-softmax uygulanır; dışarıda softmax yapmak onu iki kez uygulamaktır.

2 Örnek başına kayıpları al.

Soru
kayip_fn = nn.MSELoss(reduction=____)
Cevap
kayip_fn = nn.MSELoss(reduction="none")

Açıklama: "none" indirgeme yapmadan her örneğin kaybını döndürür.

3 Kayıpları eşleştir.

Kavram Anlamı
MSELoss Regresyon
CrossEntropyLoss Çok sınıflı, logit
BCEWithLogitsLoss İkili, logit
reduction="sum" Toplam kayıp

İleri seviye bölümündeki tüm dersler