У меня есть тензор формы (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, которые соответствуют последней действительной строке.