Как ведет себя функция nn.LSTM в пакетном режиме / seq_len? - PullRequest
0 голосов
/ 27 сентября 2019

В настоящее время я учусь использовать nn.LSTM с pytorch, и мне пришлось спросить, как работает эта функция.

В основном я пытаюсь передать свою матрицу набора данных (M xN).Поскольку набор данных представляет собой матрицу, я хотел рекурсивно (в виде временных шагов) подать набор данных в сеть LSTM с помощью Dataloader (utils.data.Dataset).

Точка, в которой я запуталсябыл размером input (seq_len, batch, input_size)

Допустим, я получаю свой data_loader с batch_size = 10.Чтобы сгенерировать train_loader с правильной формой, мне пришлось преобразовать предыдущий размер (M x N) в размер, включающий в себя sequence_length, которое можно просто преобразовать в (M / seq_len, seq_len, N).

Тогда размер ввода моего nn.LSTM будет таким: (M / seq_len / batch_size, seq_len, N)

Итак, мой главный вопрос:

  1. Если я передам этот размер данных в модель LSTM nn.LSTM (N, hidden_size), модель LSTM уже выполняетрекурсивная прямая передача в пределах всего пакета?

  2. Я также запутался с seq_len, в то время как seq_len> 1, выход получит измерение seq_len.Означает ли это, что выходные данные содержат рекурсивные операции с последовательностями?

Я не уверен, что разъяснил вопросы, но мое понимание становится довольно запутанным .. lol Надеюсь, кто-нибудь мог помочья организую правильное понимание.

1 Ответ

1 голос
/ 27 сентября 2019
  1. Да, при условии, что длина последовательности каждого сэмпла одинакова (что, похоже, имеет место в данном случае).Если нет, вы должны заполнить, например, torch.nn.utils.rnn.pad_sequence.

  2. Да, LSTM расширяется до каждого временного шага, и уже есть выход для каждого временного шага.Следовательно, вам не нужно применять его для каждого элемента отдельно.

...