НачатьНачать бесплатно

Сеть 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
Редактировать и запускать код