LSTM ネットワーク
ご存じのとおり、プレーンな RNN セルは実務ではあまり使われません。長い系列をより適切に扱える、より一般的な選択肢が Long Short-Term Memory セル、つまり LSTM です。この演習では、LSTM ネットワークを自分で実装してみます!
先ほど作成した RNN ネットワークとの最も重要な実装上の違いは、LSTM では隠れ状態が1つではなく2つあることです。つまり、この追加の隠れ状態を初期化し、LSTM セルに渡す必要があります。
torch と torch.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