Özet - Eğitim döngüsü
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 40/78
- 6 dk
Bu grupta epoch, loss, backward ve optimizer'ı öğrendin.
Özet: eğitim döngüsü
Bu grupta:
- Beş adım:
zero_grad→ ileri → kayıp →backward→step. TensorDataset+DataLoader(batch_size, shuffle); epoch = verinin tam turu.model.train()/model.eval()katman davranışı,torch.no_grad()gradyan izlemesi içindir.- Kayıplar: MSE, CrossEntropy (ham logit), BCEWithLogits;
reduction. - Gradyan kırpma, biriktirme; SGD kuralı ve öğrenme oranı zamanlayıcıları.
Uygulama Eğit ve doğrula
İlk 150 örnek eğitim, son 50 doğrulama olsun. batch_size=32, shuffle=True ile 40 epoch eğit; her epoch sonunda model.eval() ve torch.no_grad() içinde doğrulama doğruluğunu hesaplayıp listede topla, sonra model.train()'e dön. Son doğruluğun 0.9'dan büyük olduğunu ve listede 40 değer bulunduğunu aynı satırda yazdır.
Başlangıç kodu
import torch
from torch import nn
from torch.utils.data import TensorDataset, DataLoader
torch.manual_seed(0)
X = torch.randn(200, 2)
y = (X[:, 0] + X[:, 1] > 0).long()
model = nn.Sequential(nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, 2))
kayip_fn = nn.CrossEntropyLoss()
opt = torch.optim.SGD(model.parameters(), lr=0.1)
# buraya yazÖrnek çözüm
import torch
from torch import nn
from torch.utils.data import TensorDataset, DataLoader
torch.manual_seed(0)
X = torch.randn(200, 2)
y = (X[:, 0] + X[:, 1] > 0).long()
model = nn.Sequential(nn.Linear(2, 16), nn.ReLU(), nn.Linear(16, 2))
kayip_fn = nn.CrossEntropyLoss()
opt = torch.optim.SGD(model.parameters(), lr=0.1)
yukleyici = DataLoader(TensorDataset(X[:150], y[:150]), batch_size=32, shuffle=True)
dogruluk = []
for epoch in range(40):
for xb, yb in yukleyici:
opt.zero_grad()
kayip_fn(model(xb), yb).backward()
opt.step()
model.eval()
with torch.no_grad():
dogruluk.append((model(X[150:]).argmax(dim=1) == y[150:]).float().mean().item())
model.train()
print(dogruluk[-1] > 0.9, len(dogruluk) == 40)Beklenen çıktı
True True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Doğrulama doğruluğu hesaplanırken hangisi gereklidir?
- model.eval() ve torch.no_grad() Doğru cevap
- opt.step()
- kayip.backward()
- shuffle=True
Açıklama: Değerlendirmede parametre güncellenmez; katmanlar test davranışında olmalıdır.
2 Modeli eğitim moduna geri al.
model.____()
model.train()
Açıklama: train() dropout ve BatchNorm'u eğitim davranışına döndürür.
3 Araçları eşleştir.
| Kavram | Anlamı |
|---|---|
DataLoader |
Toplu veri üretir |
CrossEntropyLoss |
Sınıflandırma kaybı |
clip_grad_norm_ |
Gradyan sınırlama |
lr_scheduler |
Oran planlama |