Síť LSTM
Jak už víš, prosté RNN buňky se v praxi moc nepoužívají. Oblíbenější alternativou, která výrazně lépe zvládá dlouhé sekvence, jsou buňky Long Short-Term Memory, neboli LSTM. V tomto cvičení si takovou LSTM síť sestavíš sám!
Nejdůležitější implementační rozdíl oproti RNN síti, kterou jsi postavil/a dříve, spočívá v tom, že LSTM buňky pracují se dvěma skrytými stavy místo jednoho. To znamená, že budeš muset tento druhý skrytý stav inicializovat a předat ho LSTM buňce.
torch a torch.nn jsou už naimportované, takže rovnou do kódování!
Toto cvičení je součástí kurzu
Intermediate Deep Learning with PyTorch
Pokyny k cvičení
- V metodě
.__init__()definuj vrstvu LSTM a přiřaď ji doself.lstm. - V metodě
forward()inicializuj první skrytý stav dlouhodobé pamětic0nulami. - V metodě
forward()předej vrstvěLSTMvšechny tři vstupy: vstupní data aktuálního časového kroku a n-tici obsahující oba skryté stavy.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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