You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch中增加LSTM层数导致输出维度与标签不匹配报错原因是什么

问题根因

PyTorch的nn.LSTM接口返回的隐藏态hn的维度为[num_layers, batch_size, hidden_size],第一维度对应LSTM的层数。你在forward函数中直接对hn执行hn.view(-1, self.hidden_size)操作,会把所有层的隐藏态沿第一维度直接拼接,最终输出的第一维度等于num_layers * batch_size,自然会随层数增加线性变大,和标签的batch_size维度不匹配。
num_layers=1时训练正常属于巧合:1倍的batch_size刚好和标签的第一维度一致。

修复方案

常规场景下我们只需要取最后一层LSTM的隐藏态输入后续全连接层,直接修改hn = hn.view(-1, self.hidden_size)这行代码即可:

# 取最后一层的隐藏态,维度调整为[batch_size, hidden_size]
hn = hn[-1]

如果你的业务逻辑需要用到所有层的隐藏态,也需要按照需求做对应维度的聚合(比如均值、拼接等),不能直接全量展平所有层的维度。

另外补充一个无关的代码问题:你在全连接输出层之后又加了一层ReLU激活,如果是回归任务且标签存在负值,会导致负向预测值被强制置0影响效果;如果是分类任务,输出层加ReLU也不符合常规的分类头设计,可根据你的任务类型判断是否需要删除这层激活。

内容的提问来源于stack exchange,提问作者aditya singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:03:03