Slutför avkodartransformatorn
Dags att bygga avkodartransformatorns stomme! Det innebär att kombinera klasserna InputEmbeddings, PositionalEncoding och DecoderLayer som du skapat tidigare.
Den här övningen är en del av kursen
Transformermodeller med PyTorch
Övningsinstruktioner
- Definiera en lista med
num_layersavkodarlagrer med hjälp av en listomfattning och klassenDecoderLayer. - Definiera ett linjärt lager för att projicera de dolda tillstånden till ordtroligheter.
- Slutför framåtpassagen genom de lager som definierats i
__init__. - Instansiera en avkodartransformator och applicera den på
input_tokensochtgt_mask.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)