Rede LSTM
Como você já sabe, as células RNN simples não são muito usadas na prática. Uma alternativa usada com mais frequência, que garante um manuseio muito melhor de sequências longas, são as células de memória de curto e longo prazo ou LSTMs. Neste exercício, você mesmo criará uma rede LSTM!
A diferença de implementação mais importante em relação à rede RNN que você construiu anteriormente vem do fato de que as LSTMs têm dois estados ocultos em vez de um. Isso significa que você precisará inicializar esse estado oculto adicional e passá-lo para a célula LSTM.
torch
e torch.nn
já foram importados para você, então comece a programar!
Este exercício faz parte do curso
Aprendizagem profunda intermediária com PyTorch
Instruções do exercício
- No método
.__init__()
, defina uma camada LSTM e atribua-a aself.lstm
. - No método
forward()
, inicialize o primeiro estado oculto da memória de longo prazoc0
com zeros. - No método
forward()
, passe todas as três entradas para a camadaLSTM
: as entradas da etapa de tempo atual e uma tupla contendo os dois estados ocultos.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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