Makine Öğrenmesi
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.
Örnek çözümü göster
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())
Kendini test et
-
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
Cevabı göster
Ham logitler ve int64 etiketler — İçeride log-softmax uygulanır; dışarıda softmax yapmak onu iki kez uygulamaktır.
-
Örnek başına kayıpları al.
kayip_fn = nn.MSELoss(reduction=____)
Cevabı göster
kayip_fn = nn.MSELoss(reduction="none")
-
Kayıpları eşleştir.
- MSELoss
- Regresyon
- CrossEntropyLoss
- Çok sınıflı, logit
- BCEWithLogitsLoss
- İkili, logit
- reduction="sum"
- Toplam kayıp
Sıradaki ders: backward()