Pytorch将PackSequence参数传递给LSTM



根据我的理解,pack_sequencepack_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. 输入大小应为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]))

最新更新