TransformerEncoderLayer
- Makine Öğrenmesi kursu
- Uzman
- Ders 11/44
- 5 dk
nn.TransformerEncoderLayer, bir encoder bloğunu temsil eder.
nn.TransformerEncoderLayer
PyTorch, encoder bloğunu hazır sunar. batch_first=True ile giriş (yığın, dizi, d_model) şeklindedir:
import torch
from torch import nn
katman = nn.TransformerEncoderLayer(d_model=16, nhead=4, dim_feedforward=32,
dropout=0.0, batch_first=True)
encoder = nn.TransformerEncoder(katman, num_layers=2)
x = torch.randn(2, 5, 16)
print(encoder(x).shape) # torch.Size([2, 5, 16])d_model nhead'e tam bölünmelidir; her baş d_model/nhead boyutludur.
Parametreleri saymak
Bir katmanın parametreleri:
- Dikkat giriş projeksiyonu (Q, K, V birlikte): 3·d·d + 3·d
- Dikkat çıkış projeksiyonu: d·d + d
- FFN: d·f + f ve f·d + d
- İki LayerNorm: 2 · 2d
d, f = 16, 32
dikkat = 3*d*d + 3*d + d*d + d # 1088
ffn = d*f + f + f*d + d # 1072
norm = 4 * d # 64
print(dikkat + ffn + norm) # 2224
print(sum(p.numel() for p in katman.parameters())) # 2224f = 4d olduğunda FFN, dikkatin yaklaşık iki katı parametre taşır.
Uygulama Encoder katmanı
d_model=16, nhead=4, dim_feedforward=32, dropout=0.0, batch_first=True ile bir TransformerEncoderLayer kur ve 2 katmanlı bir TransformerEncoder'a koy. (2, 5, 16) şeklindeki girişin çıktı şeklini, ardından tek katmanın parametre sayısını yazdır.
Başlangıç kodu
import torch
from torch import nn
torch.manual_seed(0)
x = torch.randn(2, 5, 16)
# buraya yazÖrnek çözüm
import torch
from torch import nn
torch.manual_seed(0)
x = torch.randn(2, 5, 16)
katman = nn.TransformerEncoderLayer(d_model=16, nhead=4, dim_feedforward=32,
dropout=0.0, batch_first=True)
encoder = nn.TransformerEncoder(katman, num_layers=2)
print(encoder(x).shape)
print(sum(p.numel() for p in katman.parameters()))Beklenen çıktı
torch.Size([2, 5, 16]) 2224
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 d_model=16, nhead=4 iken her başın boyutu nedir?
- 20
- 4 Doğru cevap
- 16
- 64
Açıklama: 16 / 4 = 4.
2 Yığını ilk eksen yap.
nn.TransformerEncoderLayer(d_model=16, nhead=4, ____=True)
nn.TransformerEncoderLayer(d_model=16, nhead=4, batch_first=True)
Açıklama: Varsayılan (dizi, yığın, d) sırasıdır; batch_first bunu değiştirir.
3 Parametre sayılarını eşleştir (d=16, f=32).
| Kavram | Anlamı |
|---|---|
dikkat |
1088 |
FFN |
1072 |
LayerNorm'lar |
64 |
toplam |
2224 |