Il layer encoder transformer
Con una classe FeedForwardSubLayer definita, hai tutti i componenti per definire una classe EncoderLayer. Ricorda che un layer encoder in genere è composto da un meccanismo di multi-head attention e da un sottolivello feed-forward, con layer normalization e dropout sugli input e sugli output del sottolivello.
Le classi che hai già definito sono a tua disposizione con gli stessi nomi, insieme a torch e torch.nn come nn.
Questo esercizio fa parte del corso
Modelli Transformer con PyTorch
Istruzioni dell'esercizio
- Completa il metodo
__init__per istanziareMultiHeadAttention,FeedForwardSubLayere due layer normalization. - Completa il metodo
forward()inserendo il meccanismo di multi-head attention e il sottolivello feed-forward; per il meccanismo di attention, usa ilsrc_markfornito e gli embedding di input,x, per le matrici query, key e value.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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