forward
- Makine Öğrenmesi kursu
- İleri seviye
- Ders 31/78
- 5 dk
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.
Başlangıç kodu
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)
# buraya yazÖrnek çözüm
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)Beklenen çıktı
True torch.Size([4, 6])
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 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 Doğru cevap
- backward yöntemi yazılır
Açıklama: forward'daki her tensör işlemi grafiğe kaydedilir.
2 İşlevsel ReLU uygula.
x = F.____(self.l1(x))
x = F.relu(self.l1(x))
Açıklama: F.relu parametresiz bir fonksiyondur.
3 Kavramları eşleştir.
| Kavram | Anlamı |
|---|---|
forward |
İleri hesap |
F.relu |
İşlevsel aktivasyon |
kalıntı |
x + f(x) |
__init__ |
Parametreli katmanlar |