Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Vul de methode __init__ aan om MultiHeadAttention, FeedForwardSubLayer en 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 meegeleverde src_mark en 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
Code bewerken en uitvoeren