LSTM 網路
如你所知,單純的 RNN cell 在實務上並不常用。更常見、而且能更好處理長序列的替代方案是 Long Short-Term Memory cell,也就是 LSTM。本練習要你親手建立一個 LSTM 網路!
與你先前建立的 RNN 網路相比,最重要的差異在於:LSTM 具有兩個隱藏狀態,而不是一個。這代表你需要額外初始化這個隱藏狀態,並將它一同傳入 LSTM cell。
torch 和 torch.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