Optimize edici
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 28/78
- 7 dk
SGD optimize edici oluşturursun.
Optimize edici adımı
Eğitim döngüsü dört adımın tekrarıdır: ileri yayılım, kayıp, geri yayılım, güncelleme (ve gradyanları sıfırlama). Elle yazılmış hâli:
lr = 0.01
for adim in range(2000):
kayip = ((model(x) - y) ** 2).mean()
kayip.backward()
with torch.no_grad():
for p in (w, b):
p -= lr * p.grad
p.grad.zero_()Öğrenme oranı çok büyükse kayıp patlar, çok küçükse eğitim çok yavaş ilerler.
optim.SGD ile aynı iş
PyTorch'un optimize edicisi güncelleme ve sıfırlamayı üstlenir; döngü kısalır ve hatalara daha az açık olur:
opt = torch.optim.SGD([w, b], lr=0.01)
for adim in range(2000):
opt.zero_grad()
kayip = ((model(x) - y) ** 2).mean()
kayip.backward()
opt.step()zero_grad, backward, step üçlüsü tüm PyTorch eğitim döngülerinin iskeletidir.
Uygulama Modeli eğit
torch.optim.SGD([w, b], lr=0.01) ile 3000 adım eğit (her adımda zero_grad, kayıp, backward, step). Öğrenilen w ve b'yi round(..., 2) ile aynı satırda, ardından son kaybın 0.001'den küçük olduğunu yazdır.
Başlangıç kodu
import torch
x = torch.arange(10, dtype=torch.float32).unsqueeze(1)
y = 3 * x + 2
w = torch.zeros(1, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
def model(x):
return x * w + b
# buraya yazÖrnek çözüm
import torch
x = torch.arange(10, dtype=torch.float32).unsqueeze(1)
y = 3 * x + 2
w = torch.zeros(1, requires_grad=True)
b = torch.zeros(1, requires_grad=True)
def model(x):
return x * w + b
opt = torch.optim.SGD([w, b], lr=0.01)
for _ in range(3000):
opt.zero_grad()
kayip = ((model(x) - y) ** 2).mean()
kayip.backward()
opt.step()
print(round(w.item(), 2), round(b.item(), 2))
print(kayip.item() < 0.001)Beklenen çıktı
3.0 2.0 True
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bu veride <code>lr = 0.1</code> ile ne olur?
- Hiç değişmez
- Aynı sonuç
- Kayıp patlar (ıraksar) Doğru cevap
- Daha hızlı yakınsar
Açıklama: x değerleri 9'a kadar çıktığı için gradyan büyüktür; büyük adım optimumu aşar ve her adımda hata büyür.
2 Parametreleri güncelle.
opt.____()
opt.step()
Açıklama: step() gradyanlarla parametreleri günceller.
3 Döngü adımlarını eşleştir.
| Kavram | Anlamı |
|---|---|
opt.zero_grad() |
Gradyanları sıfırla |
model(x) |
İleri yayılım |
kayip.backward() |
Geri yayılım |
opt.step() |
Güncelleme |