Pytorch LSTM 输入

问题描述 投票:0回答:1

我目前有一个具有多个特征的数据集,其中每一行都是一个时间序列,每一列都是一个时间步长。例如:

当我使用 pytorch LSTM 时,我应该如何重新调整数据,以便能够正确表示顺序信息?

目前我保持原样,将特征转换为张量并将其包装在变量内,并使用以下代码对其进行重塑:

X_train_tensors = Variable(torch.Tensor(X_train), requires_grad=True)
X_test_tensors = Variable(torch.Tensor(X_test), requires_grad=True)

y_train_tensors = Variable(torch.Tensor(y_train), requires_grad=True)
y_test_tensors = Variable(torch.Tensor(y_test))

最终形状看起来像:

torch.Size([num_rows, 1, num_features])

LSTM 运行良好,但是,我担心我没有通过保持数据集的方向来捕获数据集的顺序性质?我应该将每一行作为时间序列,将列作为时间序列吗?在这种情况下,最终的形状会是什么样子,我如何使用 pytorch 工具对其进行转换?

pytorch lstm sequential
1个回答
0
投票

在您当前的配置下使用 LSTM 是没有意义的。 LSTM 对于处理可变长度序列非常有用。如果设置了特征数量并且张量的大小均为

(num_rows, 1, num_features)
,您可以将其压缩为
(num_rows, num_features)
并将它们放入 MLP。

如果你想使用 LSTM 类型的方法,你会这样做:

  • 创建大小为
    (num_rows, num_features)
    的张量,其中所有特征都是整数值(我从您的电子表格示例中推断出这一点)
  • 将这些张量通过
    nn.Embedding
    层以获得大小为
    (num_rows, num_features, d_features)
  • 的张量
  • 通过 LSTM 发送大小为
    (num_rows, num_features, d_features)
    的张量

也就是说,如果输入的特征数量是固定的,则无需使用 LSTM。当您必须处理可变长度序列时,可以使用 LSTM。

顺便说一句,看起来您正在使用几年前已被弃用的

Variable
语法 - 您应该查看 pytorch 的当前文档。

© www.soinside.com 2019 - 2024. All rights reserved.