CodeBlanks Logo Icon CodeBlanks

optimizer.step()

optimizer.step() gradyanlarla ağırlıkları günceller.

optimizer.step()

step(), her parametreyi gradyanına göre günceller. SGD için kural basittir: p ← p - lr · p.grad. Optimize edici parametre listesini kuruluşta alır:

opt = torch.optim.SGD(model.parameters(), lr=0.1)
w = torch.tensor([1.0], requires_grad=True)
opt2 = torch.optim.SGD([w], lr=0.1)
(3 * w).sum().backward()      # grad = 3
opt2.step()
print(w.item())               # 1 - 0.1·3 = 0.7

Farklı katmanlara farklı öğrenme oranları parametre grupları ile verilebilir: SGD([{"params": a, "lr": 0.01}, {"params": b}], lr=0.1).

Öğrenme oranı zamanlayıcıları

Eğitim ilerledikçe öğrenme oranını azaltmak genellikle daha iyi bir sonuç verir. torch.optim.lr_scheduler bunu otomatikleştirir; scheduler.step() her epoch sonunda çağrılır:

opt = torch.optim.SGD(model.parameters(), lr=0.1)
zam = torch.optim.lr_scheduler.StepLR(opt, step_size=10, gamma=0.5)
for epoch in range(30):
    egit_bir_epoch()
    zam.step()        # her 10 epoch'ta lr yarıya iner
print(opt.param_groups[0]["lr"])   # 0.0125

Güncel oran opt.param_groups[0]["lr"] içinde okunur.

Uygulama Adım ve zamanlayıcı

w = torch.tensor([2.0], requires_grad=True) için SGD([w], lr=0.5) kur, (w ** 2).sum() kaybını geri yay ve step() çağır; yeni w'yi item() ile yazdır. Ardından aynı optimize ediciye StepLR(opt, step_size=2, gamma=0.1) bağla, zamanlayıcıyı 4 kez ilerlet ve öğrenme oranını round(..., 4) ile yazdır.

Başlangıç kodu

model.py
import torch

w = torch.tensor([2.0], requires_grad=True)

# buraya yaz

Örnek çözüm

model.py
import torch

w = torch.tensor([2.0], requires_grad=True)

opt = torch.optim.SGD([w], lr=0.5)
(w ** 2).sum().backward()
opt.step()
print(w.item())
zam = torch.optim.lr_scheduler.StepLR(opt, step_size=2, gamma=0.1)
for _ in range(4):
    opt.step()
    zam.step()
print(round(opt.param_groups[0]["lr"], 4))

Beklenen çıktı

0.0
0.005

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 w = 2, gradyan = -4, lr = 0.5 ise SGD adımından sonra w kaçtır?

  • 2
  • 4 Doğru cevap
  • 0
  • -2

Açıklama: 2 - 0.5·(-4) = 4.

2 Güncel öğrenme oranını oku.

Soru
lr = opt.____[0]["lr"]
Cevap
lr = opt.param_groups[0]["lr"]

Açıklama: param_groups her grubun ayarlarını tutar.

3 Kavramları eşleştir.

Kavram Anlamı
step() p ← p - lr·grad
lr Adım büyüklüğü
StepLR Aralıklı azaltma
param_groups Grup başına ayar

İleri seviye bölümündeki tüm dersler