開始使用免費開始

LSTM 網路

如你所知,單純的 RNN cell 在實務上並不常用。更常見、而且能更好處理長序列的替代方案是 Long Short-Term Memory cell,也就是 LSTM。本練習要你親手建立一個 LSTM 網路!

與你先前建立的 RNN 網路相比,最重要的差異在於:LSTM 具有兩個隱藏狀態,而不是一個。這代表你需要額外初始化這個隱藏狀態,並將它一同傳入 LSTM cell。

torchtorch.nn 已為你匯入,開始寫程式碼吧!

本練習屬於課程

Intermediate Deep Learning with PyTorch

檢視課程

練習說明

  • .__init__() 方法中,定義一個 LSTM 層並指定給 self.lstm
  • forward() 方法中,使用全為 0 的張量初始化第一個長期記憶的隱藏狀態 c0
  • forward() 方法中,將三個輸入都傳給 LSTM 層:當前時間步的輸入,以及包含兩個隱藏狀態的 tuple。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

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
編輯並執行程式碼