关于PyTorch GRU文档的困惑

这可能是一个非常基础的问题,但文档中提到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要考虑的输入。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注