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
Instrucciones del ejercicio
- Completa el método
__init__para instanciarMultiHeadAttention,FeedForwardSubLayery 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 elsrc_markproporcionado 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