始める無料で始める

LSTM ネットワーク

ご存じのとおり、プレーンな RNN セルは実務ではあまり使われません。長い系列をより適切に扱える、より一般的な選択肢が Long Short-Term Memory セル、つまり LSTM です。この演習では、LSTM ネットワークを自分で実装してみます!

先ほど作成した RNN ネットワークとの最も重要な実装上の違いは、LSTM では隠れ状態が1つではなく2つあることです。つまり、この追加の隠れ状態を初期化し、LSTM セルに渡す必要があります。

torchtorch.nn はすでにインポート済みです。さっそくコーディングを始めましょう!

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

PyTorchによる中級ディープラーニング

コースを見る

演習の手順

  • .__init__() メソッドで、LSTM レイヤーを定義して self.lstm に代入します。
  • forward() メソッドで、最初の長期記憶の隠れ状態 c0 をゼロで初期化します。
  • forward() メソッドで、現在のタイムステップの入力と、2つの隠れ状態を含むタプルの3つを LSTM レイヤーに渡します。

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

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

class Net(nn.Module):
    def __init__(self, input_size):
        super().__init__()
        # Define lstm layer
        ____ = ____(
            input_size=1,
            hidden_size=32,
            num_layers=2,
            batch_first=True,
        )
        self.fc = nn.Linear(32, 1)

    def forward(self, x):
        h0 = torch.zeros(2, x.size(0), 32)
        # Initialize long-term memory
        c0 = ____
        # Pass all inputs to lstm layer
        out, _ = ____
        out = self.fc(out[:, -1, :])
        return out
コードを編集して実行