Makine Öğrenmesi
forward
forward metodu, verinin modelden nasıl geçeceğini tanımlar.
forward
forward, girdinin modülden nasıl geçeceğini tanımlar. Sıradan Python kodudur: koşullar, döngüler, birden çok girdi ve çıktı kullanılabilir. Geri yayılım yazılmaz; autograd onu ileri yayılımdan kendisi çıkarır:
class Kalinti(nn.Module):
def __init__(self, d):
super().__init__()
self.l1 = nn.Linear(d, d)
self.l2 = nn.Linear(d, d)
def forward(self, x):
return x + self.l2(torch.relu(self.l1(x))) # kalıntı bağlantısı
Girdiye kendi dönüşümünü eklemek (kalıntı bağlantısı) çok derin ağların eğitilebilmesini sağlayan temel fikirdir.
İşlevsel arayüz
Parametresi olmayan işlemler (aktivasyon, havuzlama) torch.nn.functional ile fonksiyon olarak da çağrılabilir. Parametreli katmanlar ise __init__'te modül olarak oluşturulmalıdır:
import torch.nn.functional as F
def forward(self, x):
x = F.relu(self.l1(x)) # nn.ReLU() modülüyle aynı
x = F.dropout(x, 0.2, training=self.training)
return self.l2(x)
forward içinde nn.Linear oluşturmak her çağrıda yeni rastgele ağırlıklar üretir; model hiçbir şey öğrenemez.
Uygulama Kalıntı bloğu
Verilen Kalinti bloğunda l2'nin ağırlık ve sapmasını sıfırla (torch.no_grad() içinde zero_()). Bu durumda blok girdiyi değiştirmeden geçirmelidir; torch.equal(blok(x), x) sonucunu ve çıktı şeklini aynı satırda yazdır.
Örnek çözümü göster
import torch
from torch import nn
class Kalinti(nn.Module):
def __init__(self, d):
super().__init__()
self.l1 = nn.Linear(d, d)
self.l2 = nn.Linear(d, d)
def forward(self, x):
return x + self.l2(torch.relu(self.l1(x)))
blok = Kalinti(6)
x = torch.randn(4, 6)
with torch.no_grad():
blok.l2.weight.zero_()
blok.l2.bias.zero_()
sonuc = blok(x)
print(torch.equal(sonuc, x), sonuc.shape)
Kendini test et
-
Bir modülde geri yayılım nasıl tanımlanır?
- Türevler elle girilir
- optimize edici tanımlar
- Tanımlanmaz; autograd forward'dan çıkarır
- backward yöntemi yazılır
Cevabı göster
Tanımlanmaz; autograd forward'dan çıkarır — forward'daki her tensör işlemi grafiğe kaydedilir.
-
İşlevsel ReLU uygula.
x = F.____(self.l1(x))
Cevabı göster
x = F.relu(self.l1(x))
-
Kavramları eşleştir.
- forward
- İleri hesap
- F.relu
- İşlevsel aktivasyon
- kalıntı
- x + f(x)
- __init__
- Parametreli katmanlar
Sıradaki ders: nn.Linear