gpt4 book ai didi

deep-learning - Pytorch - 使用 LSTM 网络时尺寸不正确

转载 作者:行者123 更新时间:2023-12-04 14:23:38 25 4
gpt4 key购买 nike

我开始使用 pytorch 并使用一些转换来构建以下模型,并使用其中一个教程作为引用:

model = torch.nn.Sequential( 
torch.nn.Linear(D_in, H),
torch.nn.ReLU(),
torch.nn.Linear(H, D_out),
)

我想使用 LSTM 网络,所以我尝试执行以下操作:

model = torch.nn.Sequential(
torch.nn.LSTM(D_in, H),
torch.nn.Linear(H, D_out)
)

这给了我这个错误:

RuntimeError: input must have 3 dimensions, got 2

为什么我会看到这个错误?我预计我对如何在 pytorch 中链接转换(网络?)的理解存在根本性错误......

编辑

在遵循@esBee 的建议后,我发现以下运行正确。这是因为 LSTM 期望输入具有以下维度:

input of shape (seq_len, batch, input_size): tensor containing the features of the input sequence. The input can also be a packed variable length sequence

local_x = local_x.unsqueeze(0)
y_pred, (hn, cn) = layerA(local_x)
y_pred = y_pred.squeeze(0)
y_pred = layerB(y_pred)

但是,我的原始训练/测试数据集只有序列长度 1 这一事实让我觉得我做错了什么。在神经网络的上下文中,此参数的用途是什么?

最佳答案

这里需要注意的是,与 torch.nn.Linear 等线性层相反,torch 等循环层有不止 1 个输出.nn.LSTM.

虽然 torch.nn.Linear 仅返回 y = Ax + b 中的 y,但 torch.nn.LSTMs return output, (h_n, c_n) (更详细地解释 in the docs )让您选择要处理的输出。因此,在您的示例中发生的情况是,您将所有这些几种类型的输出输入到 LSTM 层之后的层中(导致您看到的错误)。您应该改为选择 LSTM 输出的特定部分,并将其仅馈送到下一层。

很遗憾,我不知道如何在 Sequential 中选择 LSTM 的输出(欢迎提出建议),但您可以重写

model = torch.nn.Sequential(
torch.nn.LSTM(D_in, H),
torch.nn.Linear(H, D_out)
)

model(x)

作为

layerA = torch.nn.LSTM(D_in, H)
layerB = torch.nn.Linear(H, D_out)

x = layerA(x)
x = layerB(x)

然后通过编写选择 LSTM 最后一层的输出特征 (h_n) 来纠正它

layerA = torch.nn.LSTM(D_in, H)
layerB = torch.nn.Linear(H, D_out)

x = layerA(x)[0]
x = layerB(x)

关于deep-learning - Pytorch - 使用 LSTM 网络时尺寸不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50557039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com