CommencerCommencer gratuitement

La couche d’encodeur du transformer

Avec une classe FeedForwardSubLayer définie, vous avez toutes les pièces nécessaires pour définir une classe EncoderLayer. Rappelez-vous que la couche d’encodeur se compose généralement d’un mécanisme d’attention multi-têtes et d’une sous-couche feed-forward, avec une normalisation de couche et un dropout appliqués aux entrées et sorties de la sous-couche.

Les classes que vous avez déjà définies sont à votre disposition avec les mêmes noms, ainsi que torch et torch.nn sous le nom nn.

Cet exercice fait partie du cours

Modèles Transformer avec PyTorch

Afficher le cours

Instructions

  • Complétez la méthode __init__ pour instancier MultiHeadAttention, FeedForwardSubLayer et deux normalisations de couche.
  • Complétez la méthode forward() en remplissant le mécanisme d’attention multi-têtes et la sous-couche feed-forward ; pour le mécanisme d’attention, utilisez le src_mask fourni et les embeddings d’entrée, x, pour les matrices query, key et value.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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
Modifier et exécuter le code