Pytorch передает аргумент PackSequence в LSTM - PullRequest
0 голосов
/ 07 ноября 2018

Насколько я понимаю, pack_sequence и pack_padded_sequence возвращают PackedSequence, для которого его атрибут data всегда должен быть 1 измерением.

Однако следующий код выдает ошибку: RuntimeError: input must have 2 dimensions, got 1.

import torch
import torch.nn.utils.rnn as rnn_utils
a = torch.Tensor([1, 2, 3])
b = torch.Tensor([4, 5])
c = torch.Tensor([6])
seq = rnn_utils.pack_sequence([a, b, c])
lstm = torch.nn.LSTM(
    input_size=3,
    hidden_size=3
)
lstm(seq)

Я пытался batch_first=True, это не сработало.

Исходный файл с кодом ошибки: https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/rnn.py#L127

1 Ответ

0 голосов
/ 08 ноября 2018

В вашем коде есть несколько ошибок.

  1. Размер ввода должен быть 1
  2. LSTM принимает вектор на каждом временном шаге, вы передаете скаляры и, следовательно, ошибку измерения.

Ниже код должен решить проблему. Я сделал каждый вход массивом (1,) и изменил размер ввода на 1.

import torch 
import torch.nn.utils.rnn as rnn_utils 
a = torch.Tensor([[1], [2], [3]]) 
b = torch.Tensor([[4], [5]]) 
c = torch.Tensor([[6]]) 
seq = rnn_utils.pack_sequence([a, b, c]) 
lstm = torch.nn.LSTM(input_size=1, hidden_size=3) 
lstm(seq) 

Упакованная последовательность может быть многомерной, и она зависит от данных на каждом временном шаге. Например, в этом случае seq будет

PackedSequence(data=tensor([[1.],
        [4.],
        [6.],
        [2.],
        [5.],
        [3.]]), batch_sizes=tensor([3, 2, 1]))
...