IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Completa il metodo __init__ per istanziare MultiHeadAttention, FeedForwardSubLayer e 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 il src_mark fornito 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
Modifica ed esegui il codice