lstm - Pytorch 将 PackSequence 参数传递给 LSTM
问题描述
根据我的理解,pack_sequence
并pack_padded_sequence
返回 a 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
- 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]))
推荐阅读
- python - 跨列将函数应用于pandas DataFrame以创建用于排序的临时列
- php - 为什么我的陈述总是错误的?if (isset($_GET['action']) && $_GET['action']=='IPN_Handler')
- docker - nslookup 无法获取最新busybox 上的服务IP
- reactjs - 为什么 React 中的接口有用?
- razor - .NetCore Dropdown Blank 在 Razor 视图中使用 ViewBag 示例
- python - 多元线性回归成本太高
- python - 如果进程没有被杀死,subprocess32.check_output 不会引发 TimeoutExpired
- java - 如何通过继承访问字符串的值?
- python - 张量流中的最后一批不完整
- python - 如何制作梯度散点图