ComeçarComece de graça

A camada de transformer do codificador

Com a classe FeedForwardSubLayer definida, você tem todas as peças necessárias para definir uma classe EncoderLayer. Lembre-se de que a camada do codificador normalmente consiste em um mecanismo de atenção multi-cabeças e uma subcamada feed-forward, com normalização de camada e dropout nas entradas e saídas da subcamada.

As classes que você já definiu estão disponíveis com os mesmos nomes, junto com torch e torch.nn como nn.

Este exercício faz parte do curso

Modelos Transformer com PyTorch

Ver curso

Instruções do exercício

  • Complete o método __init__ para instanciar MultiHeadAttention, FeedForwardSubLayer e duas normalizações de camada.
  • Complete o método forward() preenchendo o mecanismo de atenção multi-cabeças e a subcamada feed-forward; para o mecanismo de atenção, use o src_mark fornecido e os embeddings de entrada, x, para as matrizes de query, key e value.

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

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 e executar o código