Encoder transformer katmanı
Bir FeedForwardSubLayer sınıfı tanımlandığına göre, bir EncoderLayer sınıfını tanımlamak için gereken tüm parçalara sahipsin. Hatırla: Encoder katmanı tipik olarak çok başlı (multi-head) bir dikkat mekanizmasından ve alt katmanın giriş/çıkışlarında katman normalizasyonu ve dropout bulunan bir ileri beslemeli (feed-forward) alt katmandan oluşur.
Daha önce tanımladığın sınıflar aynı adlarla kullanılabilir durumda; ayrıca torch ve torch.nn nn olarak mevcut.
Bu egzersiz
PyTorch ile Transformer Modelleri
kursunun bir parçasıdırEgzersiz talimatları
__init__metodunu tamamlayarakMultiHeadAttention,FeedForwardSubLayerve iki katman normalizasyonunu örnekle.forward()metodunu, çok başlı dikkat mekanizmasını ve ileri beslemeli alt katmanı doldurarak tamamla; dikkat mekanizması için sağlanansrc_mark'ı ve sorgu, anahtar ve değer matrisleri olarak girdi gömlemelerini,x'i kullan.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
class EncoderLayer(nn.Module):
def __init__(self, d_model, num_heads, d_ff, dropout):
super().__init__()
# Instantiate the layers
self.self_attn = ____(d_model, num_heads)
self.ff_sublayer = ____(d_model, d_ff)
self.norm1 = ____
self.norm2 = ____
self.dropout = nn.Dropout(dropout)
def forward(self, x, src_mask):
# Complete the forward method
attn_output = self.____
x = self.norm1(x + self.dropout(attn_output))
ff_output = self.____
x = self.norm2(x + self.dropout(ff_output))
return x