Makine Öğrenmesi
Eğitim döngüsü
Eğitim döngüsü, veriyi modele verip loss'u azaltır.
Eğitim döngüsü
PyTorch'ta eğitim döngüsünü sen yazarsın. Her toplu veri (batch) için aynı beş adım tekrarlanır:
for xb, yb in yukleyici:
opt.zero_grad() # 1. eski gradyanları sil
cikti = model(xb) # 2. ileri yayılım
kayip = kayip_fn(cikti, yb) # 3. kayıp
kayip.backward() # 4. geri yayılım
opt.step() # 5. güncelleme
Döngünün açık olması esneklik sağlar: gradyan kırpma, karışık hassasiyet, birden çok kayıp gibi değişiklikler bu beş adımın arasına eklenir.
DataLoader
TensorDataset tensörleri örnek örnek erişilebilir bir veri setine, DataLoader ise onu karıştırılmış toplu verilere çevirir:
from torch.utils.data import TensorDataset, DataLoader
ds = TensorDataset(X, y)
yukleyici = DataLoader(ds, batch_size=32, shuffle=True)
xb, yb = next(iter(yukleyici))
print(xb.shape, yb.shape) # torch.Size([32, 2]) torch.Size([32])
Toplu veriyle eğitim hem belleğe sığmayı sağlar hem de gradyana yararlı bir gürültü ekleyerek genellemeye yardım eder.
Uygulama Toplu veri
200 örnekli X, y'den TensorDataset ve DataLoader(..., batch_size=64, shuffle=False) kur. Toplu veri sayısını (len(yukleyici)) ve her toplu verinin boyutunu bir liste olarak yazdır.
Örnek çözümü göster
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, y), batch_size=64, shuffle=False)
print(len(yukleyici))
print([len(xb) for xb, _ in yukleyici])
Kendini test et
-
<code>opt.zero_grad()</code> unutulursa ne olur?
- Hiçbir şey
- Gradyanlar adımlar boyunca birikir, güncellemeler bozulur
- Hata verir
- Daha hızlı öğrenir
Cevabı göster
Gradyanlar adımlar boyunca birikir, güncellemeler bozulur — backward her çağrıda gradyanı ekler; sıfırlanmazsa toplam büyür.
-
Toplu verileri karıştırarak üret.
yukleyici = DataLoader(ds, batch_size=32, ____=True)
Cevabı göster
yukleyici = DataLoader(ds, batch_size=32, shuffle=True)
-
Adımları eşleştir.
- zero_grad
- Gradyanları sil
- model(xb)
- İleri yayılım
- backward
- Gradyan hesabı
- step
- Parametre güncelleme
Sıradaki ders: Epoch