Сеть LSTM
Как вы уже знаете, простые ячейки RNN на практике применяются редко. Более распространённой альтернативой, которая значительно лучше справляется с длинными последовательностями, являются ячейки долгой краткосрочной памяти — Long Short-Term Memory (LSTM). В этом упражнении вы построите сеть LSTM самостоятельно!
Главное отличие в реализации по сравнению с сетью RNN, которую вы строили ранее, состоит в том, что LSTM использует два скрытых состояния вместо одного. Это означает, что вам нужно будет инициализировать дополнительное скрытое состояние и передать его ячейке LSTM.
torch и torch.nn уже импортированы — можно приступать к написанию кода!
Это упражнение является частью курса
Глубокое обучение на PyTorch: средний уровень
Инструкции к упражнению
- В методе
.__init__()определите слой LSTM и присвойте егоself.lstm. - В методе
forward()инициализируйте первое долгосрочное скрытое состояниеc0нулями. - В методе
forward()передайте в слойLSTMвсе три входных значения: входные данные текущего временного шага и кортеж, содержащий два скрытых состояния.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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