Aan de slagGa gratis aan de slag

De decoder-transformer afronden

Tijd om de body van de decoder-transformer te bouwen! Je combineert hiervoor de klassen InputEmbeddings, PositionalEncoding en DecoderLayer die je eerder hebt gemaakt.

Deze oefening maakt deel uit van de cursus

Transformermodels met PyTorch

Cursus bekijken

Oefeninstructies

  • Definieer een lijst van num_layers decoderlagen met een list comprehension en de klasse DecoderLayer.
  • Definieer een lineaire laag om de verborgen toestanden te projecteren naar woordwaarschijnlijkheden.
  • Maak de forward pass af door de lagen gedefinieerd in __init__ te doorlopen.
  • Instantieer een decoder-transformer en pas die toe op input_tokens en tgt_mask.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

class TransformerDecoder(nn.Module):
    def __init__(self, vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length):
        super(TransformerDecoder, self).__init__()
        self.embedding = InputEmbeddings(vocab_size, d_model)
        self.positional_encoding = PositionalEncoding(d_model, max_seq_length)
        # Define the list of decoder layers and linear layer
        self.layers = nn.____([____(d_model, num_heads, d_ff, dropout) for _ in range(num_layers)])
        # Define a linear layer to project hidden states to likelihoods
        self.fc = ____
  
    def forward(self, x, tgt_mask):
        # Complete the forward pass
        x = self.____(x)
        x = self.____(x)
        for layer in self.layers:
            x = ____
        x = self.____(x)
        return F.log_softmax(x, dim=-1)

# Instantiate a decoder transformer and apply it to input_tokens and tgt_mask
transformer_decoder = ____(vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length)   
output = ____
print(output)
print(output.shape)
Code bewerken en uitvoeren