根据我的理解,pack_sequence
和pack_padded_sequence
返回一个PackedSequence
,其data
属性应始终为一维。
但是,以下代码给出了错误: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
- 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]))