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
Instruções do exercício
- Complete o método
__init__para instanciarMultiHeadAttention,FeedForwardSubLayere 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 osrc_markfornecido 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