【问题标题】:Pytorch passing PackSequence argument to LSTMPytorch 将 PackSequence 参数传递给 LSTM
【发布时间】:2019-04-11 08:47:49
【问题描述】:

据我了解,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

【问题讨论】:

    标签: lstm pytorch


    【解决方案1】:

    您的代码有一些问题。

    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]))
    

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 2018-06-29
      • 2019-09-27
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2013-11-19
      • 2011-01-06
      相关资源
      最近更新 更多