Примените pack_padded_sequence и pad_packed_sequence к данным, дополненным в двух измерениях в PyTorch - PullRequest
0 голосов
/ 27 марта 2020

У меня есть тензор формы (batch_size, sentence_length, word_length). Длина предложения здесь соответствует временным шагам в RNN. Предложения имеют разную длину, поэтому это измерение дополняется. Слова имеют разную длину (символы), поэтому это измерение также дополняется. У нас есть предложение типа

sentence = torch.Tensor([[1, 2, 3],
                         [1, 2, 0],
                         [0, 0, 0]])

После подачи пакетов в слой внедрения у нас есть (batch_size, sentence_length, word_length, embedding_dim). Мы можем изменить его или суммировать одно измерение, чтобы получить трехмерный тензор и передать его слою LSTM. Интересно, смогу ли я упаковать эту партию, чтобы сэкономить время и подать меньше наполнителей в сеть. Если да, как правильно его упаковать и распаковать?

Обновление :

На данный момент я могу придумать один способ: упаковать последовательность относительно длины предложения , Например, вышеприведенное предложение имеет length=2. Подайте эту информацию в pack_padded_sequence со встроенным тензором формы (batch_size, -1, embedded_dim) (таким образом length=2 * 3). Вложение нуля во второй строке будет передано в LSTM, поэтому, учитывая, что мы заинтересованы в последнем временном шаге, padding_idx=0 следует игнорировать (учитывая, что мы берем последний вывод LSTM, то есть вывод, соответствующий 0 в вторая строка) или мы должны объединить последние 3 выхода LSTM, которые соответствуют последней действительной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...