始める無料で始める

エンコーダ・デコーダTransformerの構築

DecoderLayer クラスを更新し、同様の変更を TransformerDecoder にも反映できたので、いよいよすべてを組み合わせます。クラスをモジュール化し階層的に設計してきたため、エンコーダ・デコーダ型のTransformerを構築するには、TransformerDecoderTransformerEncoder の2つをインスタンス化するだけで済みます。

この演習はコースの一部です

PyTorchで学ぶTransformerモデル

コースを見る

演習の手順

  • エンコーダとデコーダの出力を計算するように forward() を完成させてください。
  • 用意された src_masktgt_maskcross_mask を使って、input_tokens に対してTransformerをインスタンス化し呼び出してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

class Transformer(nn.Module):
    def __init__(self, vocab_size, d_model, num_heads, num_layers, d_ff, max_seq_length, dropout):
        super().__init__()
        self.encoder = TransformerEncoder(vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length)
        self.decoder = TransformerDecoder(vocab_size, d_model, num_layers, num_heads, d_ff, dropout, max_seq_length)

    def forward(self, x, src_mask, tgt_mask, cross_mask):
        # Complete the forward pass
        encoder_output = self.encoder(____, ____)
        decoder_output = self.decoder(____, ____, tgt_mask, cross_mask)
        return decoder_output

# Instantiate and call the transformer
transformer = ____(vocab_size, d_model, num_heads, num_layers, d_ff, max_seq_length, dropout)
outputs = ____
print(outputs)
print(outputs.shape)
コードを編集して実行