De encoder-transformerlaag
Met een gedefinieerde FeedForwardSubLayer-klasse heb je alle bouwstenen om een EncoderLayer-klasse te definiëren. Denk eraan dat de encoderlaag doorgaans bestaat uit een multi-head attention-mechanisme en een feed-forward sublaag, met layernormalisatie en dropout op de input en output van de sublaag.
De klassen die je al hebt gedefinieerd, zijn beschikbaar met dezelfde namen, samen met torch en torch.nn als nn.
Deze oefening maakt deel uit van de cursus
Transformermodels met PyTorch
Oefeninstructies
- Vul de methode
__init__aan omMultiHeadAttention,FeedForwardSubLayeren twee layernormalisaties te instantieren. - Maak de methode
forward()af door het multi-head attention-mechanisme en de feed-forward sublaag in te vullen; gebruik voor het aandachtmechanisme de meegeleverdesrc_marken de input-embeddings,x, voor de query-, key- en valuematrices.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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