这可能是一个非常基础的问题,但文档中提到GRU的输入需要是三维的,这到底是什么意思?PyTorch的GRU文档中指出:
形状为(seq_len, batch, input_size)的输入:包含输入序列特征的张量。输入也可以是打包的可变长度序列。详见torch.nn.utils.rnn.pack_padded_sequence()。
https://pytorch.org/docs/stable/generated/torch.nn.GRU.html
假设我想预测序列中的下一个数字,并且我有以下数据集:
n, label1, 22, 33, 64, 9...
如果我使用前两个输入作为窗口来预测下一个值,数据集会变成这样:
t-2, t-1, t, labelna, na, 1, 2na, 1, 2, 31, 2, 3, 62, 3, 4, 10...
其中t-x代表使用前一个时间步的输入值。
因此,当创建顺序加载器时,对于1,2,3,6这一行,它应该创建如下张量:
inputs: tensor([[1,2,3]]) #形状(1,3)labels: tensor([[6]]) #形状(1,1)
我目前理解的输入形状是(#批次,#每个批次的特征),输出形状是(#批次,#每个批次的输出特征)。
我的问题是,输入张量应该看起来是这样的吗:
tensor([[[1],[2],[3]]])
这代表(#批次,#要考虑的先前输入,#每个输入的特征)。
我想我更想理解为什么PyTorch中的GRU输入有三个维度。这个第三维度到底代表什么?如果我有一个像上面的转换后的数据集,如何正确地将其传递给模型。
编辑:现有的模式是这样的:
1 + 1 = 22 + 1 = 33 + 2 + 1 = 64+ 3 + 2 + 1 = 10
我希望t-2, t-1和t代表每个时间步的特征,用于帮助猜测。例如,每个时间点可能有2个特征。维度将是(1批次大小,3个时间步,2个特征)。
我的问题是GRU是接受扁平化的输入:
(1批次大小,3个时间步 * 每个时间步2个特征)
还是未扁平化的输入:
(1批次大小,3个时间步,每个时间步2个特征)
我目前认为是第二种输入,但我想确认我的理解是否正确。
回答:
我已经搞明白了。基本上,序列长度为3意味着系统的输入需要是:[[[1],[2],[3]], [[2], [3], [4]]],对于批次大小为2,序列长度为3,每个时间步的特征输入为1。基本上每个序列是在某个时间t要考虑的输入。