ComenzarEmpieza gratis

La capa transformer del codificador

Con la clase FeedForwardSubLayer definida, ya tienes todas las piezas necesarias para definir una clase EncoderLayer. Recuerda que la capa del codificador suele constar de un mecanismo de atención multi-cabeza y una subcapa feed-forward con normalización por capas y dropout en las entradas y salidas de la subcapa.

Las clases que ya has definido están disponibles con los mismos nombres, junto con torch y torch.nn como nn.

Este ejercicio forma parte del curso

Modelos Transformer con PyTorch

Ver curso

Instrucciones del ejercicio

  • Completa el método __init__ para instanciar MultiHeadAttention, FeedForwardSubLayer y dos normalizaciones por capas.
  • Completa el método forward() rellenando el mecanismo de atención multi-cabeza y la subcapa feed-forward; para el mecanismo de atención, usa el src_mark proporcionado y los embeddings de entrada, x, para las matrices query, key y value.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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
Editar y ejecutar código