Sieć LSTM
Jak już wiesz, zwykłe komórki RNN rzadko stosuje się w praktyce. Częściej wybieraną alternatywą, która znacznie lepiej radzi sobie z długimi sekwencjami, są komórki Long Short-Term Memory, czyli LSTM. W tym ćwiczeniu samodzielnie zbudujesz sieć LSTM!
Najważniejsza różnica implementacyjna w porównaniu z wcześniej zbudowaną siecią RNN wynika z tego, że LSTM korzysta z dwóch stanów ukrytych zamiast jednego. Trzeba więc zainicjalizować ten dodatkowy stan i przekazać go do komórki LSTM.
torch i torch.nn są już zaimportowane – możesz zaczynać!
To ćwiczenie jest częścią kursu
Głębokie uczenie z PyTorch – poziom średnio zaawansowany
Instrukcje do ćwiczenia
- W metodzie
.__init__()zdefiniuj warstwę LSTM i przypisz ją doself.lstm. - W metodzie
forward()zainicjalizuj pierwszy długoterminowy stan ukrytyc0zerami. - W metodzie
forward()przekaż do warstwyLSTMwszystkie trzy dane wejściowe: dane z bieżącego kroku czasowego oraz krotkę zawierającą dwa stany ukryte.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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