CodeBlanks Logo Icon CodeBlanks

TransformerEncoderLayer

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()))   # 2224

f = 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

model.py
import torch
from torch import nn

torch.manual_seed(0)
x = torch.randn(2, 5, 16)

# buraya yaz

Örnek çözüm

model.py
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.

Soru
nn.TransformerEncoderLayer(d_model=16, nhead=4, ____=True)
Cevap
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

Uzman bölümündeki tüm dersler