根据我的理解,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
答案 0 :(得分:1)
您的代码有些错误。
下面的代码应解决此问题。我为每个输入设置了一个(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]))