CodeBlanks Logo Icon CodeBlanks

nn.Linear

nn.Linear, tam bağlı katman oluşturur.

nn.Linear

nn.Linear(girdi, çıktı), y = x Wᵀ + b hesaplar. Ağırlık matrisi (çıktı, girdi) şeklindedir; dikkat, NumPy alışkanlığının tersi:

l = nn.Linear(3, 2)
print(l.weight.shape)   # torch.Size([2, 3])
print(l.bias.shape)     # torch.Size([2])
x = torch.randn(5, 3)
print(torch.allclose(l(x), x @ l.weight.T + l.bias))   # True

Ağırlıklar varsayılan olarak küçük rastgele değerlerle (Kaiming düzgün) başlatılır; bias=False sapmayı kaldırır.

Ağırlık başlatma

Başlatma eğitimin hızını ve kararlılığını etkiler. nn.init modülü yaygın yöntemleri sunar; derin ReLU ağlarında Kaiming, tanh/sigmoid ağlarında Xavier tercih edilir:

l = nn.Linear(256, 256)
nn.init.kaiming_normal_(l.weight, nonlinearity="relu")
nn.init.zeros_(l.bias)
# tüm ağırlıkları sıfırlamak simetriyi bozamaz: tüm nöronlar aynı öğrenir

Ağırlıkların hepsi aynı değerle başlatılırsa her nöron aynı gradyanı alır ve aynı kalır; rastgelelik bu simetriyi kırar.

Uygulama Doğrusal katmanı elle hesapla

nn.Linear(3, 2) katmanının ağırlığını [[1, 0, -1], [2, 1, 0]], sapmasını [0.5, -1] yap (torch.no_grad() içinde copy_). x = torch.tensor([[1., 2., 3.]]) için çıktıyı tolist() ile, ardından x @ l.weight.T + l.bias ile aynı olduğunu torch.allclose ile yazdır.

Başlangıç kodu

model.py
import torch
from torch import nn

l = nn.Linear(3, 2)
x = torch.tensor([[1., 2., 3.]])

# buraya yaz

Örnek çözüm

model.py
import torch
from torch import nn

l = nn.Linear(3, 2)
x = torch.tensor([[1., 2., 3.]])

with torch.no_grad():
    l.weight.copy_(torch.tensor([[1., 0., -1.], [2., 1., 0.]]))
    l.bias.copy_(torch.tensor([0.5, -1.]))
    y = l(x)
print(y.tolist())
print(torch.allclose(y, x @ l.weight.T + l.bias))

Beklenen çıktı

[[-1.5, 3.0]]
True

Soru ve cevaplar

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

1 <code>nn.Linear(128, 10)</code> katmanının ağırlık şekli nedir?

  • (128,)
  • (10, 128) Doğru cevap
  • (128, 10)
  • (10,)

Açıklama: PyTorch ağırlığı (çıktı, girdi) olarak saklar.

2 Sapmasız bir doğrusal katman kur.

Soru
l = nn.Linear(10, 5, ____=False)
Cevap
l = nn.Linear(10, 5, bias=False)

Açıklama: bias=False sapma parametresini kaldırır.

3 Özellikleri eşleştir (nn.Linear(3, 2)).

Kavram Anlamı
weight.shape (2, 3)
bias.shape (2,)
parametre sayısı 8
l(x) şekli (5, 3) girdide (5, 2)

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