Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

5. ünite / 10

Eğitim döngüsü ve doğrulama

Dört adımlı döngü, tur ve yığın, model.train / model.eval, eğitim–doğrulama–test ayrımı, metrikler, tekrarlanabilirlik.

Bu ünitenin sonunda

  • Dört adımlı eğitim döngüsünü (zero_grad, ileri, backward, step) hatasız yazmak
  • Veriyi eğitim, doğrulama ve test olarak ayırmanın nedenini açıklamak
  • Kayıp ve doğruluk eğrilerinden öğrenmenin gidişini okumak
  • Tohumlarla tekrarlanabilir bir deney kurmak

Ders notları

PyTorch'ta eğitim döngüsünü sen yazarsın. Her yığın için dört adım:

  1. optimizer.zero_grad(): önceki gradyanları sil.
  2. loss = loss_fn(model(xb), yb): ileri geçiş ve kayıp.
  3. loss.backward(): gradyanlar.
  4. optimizer.step(): parametreleri güncelle.

Verinin tamamı bir kez görülünce bir tur (epoch) biter. Her turun sonunda model doğrulama kümesinde ölçülür: model.eval() ve torch.no_grad() ile.

Neden üç küme?

Eğitim kaybı, modelin ezberleyip ezberlemediğini söylemez. Doğrulama kümesi model ve hiperparametre seçimi (öğrenme oranı, katman sayısı, ne zaman durulacağı) için kullanılır; seçim yapıldıkça ona da "uyum" sağlanır. Bu yüzden son raporlanan sayı, hiç dokunulmamış bir test kümesinden gelmelidir.

Eğrileri okumak

İki eğri birlikte düşüyorsa öğrenme sürüyor. Eğitim düşer ama doğrulama yükselirse aşırı öğrenme (8. ünite). İkisi de yüksek kalırsa model ya da öğrenme oranı yetersizdir. Tekrarlanabilirlik için torch.manual_seed, NumPy ve Python tohumlarını sabitle; aynı tohum aynı eğriyi vermeli (bu sayfadaki ağ da tohumludur).

Görselleştirici

Eğitim döngüsü: tarayıcıda gerçek bir küçük ağ

İki ay veri kümesinde 2-16-16-1 ağ, eğitim ve doğrulama ayrımıyla gerçekten eğitilir (Adam, ikili çapraz entropi). Her turda iki kayıp eğrisi ve doğruluk; karar sınırı arkada. Gizli katman ve öğrenme oranı senin.

Kendin dene

Eğitim görselleştiricisinde varsayılan ayarla 60 tur eğit ve iki kayıp eğrisini izle. Öğrenme oranını 0,001 ve 0,1 yap: eğriler nasıl değişti? Gizli katmanı 2 nörona indir: karar sınırı neden iki ayı ayıramıyor? Tohumu değiştirip aynı ayarla iki kez eğit: son doğrulama doğruluğu ne kadar oynuyor?

Kod

Python: eğitim ve doğrulama döngüsü
import torch
from torch import nn
from sklearn.datasets import make_moons

torch.manual_seed(0)                                     # tekrarlanabilirlik
X, y = make_moons(400, noise=0.2, random_state=0)       # make_moons örnekleri karıştırır
X, y = torch.tensor(X, dtype=torch.float32), torch.tensor(y, dtype=torch.float32).unsqueeze(1)
Xtr, ytr, Xva, yva = X[:300], y[:300], X[300:], y[300:]   # doğrulama ayrı tutulur

model = nn.Sequential(nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, 16), nn.ReLU(), nn.Linear(16, 1))
opt = torch.optim.Adam(model.parameters(), lr=0.01)
loss_fn = nn.BCEWithLogitsLoss()

for epoch in range(1, 101):
    model.train()                                        # dropout/batchnorm eğitim kipi
    perm = torch.randperm(len(Xtr))
    for i in range(0, len(Xtr), 32):
        idx = perm[i:i + 32]
        opt.zero_grad()                                  # 1) gradyanları sıfırla
        loss = loss_fn(model(Xtr[idx]), ytr[idx])        # 2) ileri geçiş + kayıp
        loss.backward()                                  # 3) geri yayılım
        opt.step()                                       # 4) güncelle
    model.eval()
    with torch.no_grad():                                # doğrulamada grafik kurma
        va = loss_fn(model(Xva), yva).item()
        acc = ((model(Xva) > 0).float() == yva).float().mean().item()
    if epoch % 20 == 0:
        print(f'epoch {epoch:3d}  train {loss.item():.3f}  val {va:.3f}  acc {acc:.3f}')

Colab defteri

PyTorch tarayıcıda çalışmaz; gerçek kodu Google Colab'da (ücretsiz GPU ile) çalıştır. Defteri indir, colab.research.google.com adresinde "Dosya → Not defteri yükle" ile aç, "Çalışma zamanı → Çalışma zamanı türünü değiştir → T4 GPU" seç ve hücreleri sırayla çalıştır.

Defteri indir (.ipynb)

Sık yapılan hatalar

  • model.eval()'ı unutmak: dropout ve batchnorm doğrulamada da eğitim kipinde çalışır, sonuçlar gürültülü ve kötü çıkar.
  • Doğrulama kümesiyle hiperparametre seçip aynı sayıyı "test doğruluğu" diye raporlamak: iyimser sonuç.
  • Normalleştirme istatistiklerini (ortalama, std) tüm veriden hesaplamak: test bilgisi eğitime sızar. Yalnız eğitim kümesinden hesapla.
  • Kaybı tur sonunda yalnız son yığından raporlamak: gürültülüdür; tur boyunca ortala.

Yazılım mühendisliği bağlantısı

Eğitim döngüsü, yeniden kullanılabilir bir altyapı kodudur; her deneyde baştan yazma.

  • train_one_epoch ve evaluate fonksiyonlarını ayır, metrikleri sözlük olarak döndür, en iyi modeli kaydet (checkpoint).
  • Hızlı bir "duman testi": tek bir küçük yığında modelin kaybı sıfıra yakın ezberleyebildiğini sına; ezberleyemiyorsa kodda hata vardır.

Kendini sına

  1. Eğitim döngüsünde doğru adım sırası hangisidir?

  2. Test kümesinin doğrulama kümesinden farkı nedir?

  3. Eğitim kaybı düşerken doğrulama kaybı yükseliyorsa ne oluyor?

  4. model.eval() ne yapar?

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç