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

PyTorch双向LSTM输入尺寸与特征数量匹配精度异常问题咨询

结论:你的假设不成立

双向LSTM的工作机制澄清

PyTorch的nn.LSTM的input_size参数仅指代单个时间步、单个样本的输入特征维度,和是否开启双向模式完全无关。
双向模式的逻辑是在隐层层面实现的:框架会初始化两套完全独立的LSTM权重,一套按原序列顺序正向计算,一套按序列倒序反向计算,两套网络接收的输入完全一致,都是你传入的原始序列,不需要输入维度做任何翻倍处理。两个方向计算完成后,仅会对每个时间步的输出隐状态做拼接,因此最终输出的特征维度是2 * hidden_size,全程不会修改输入要求的维度。
你可以用以下代码验证这个逻辑,运行不会报错,也符合官方定义的计算规则:

import torch
import torch.nn as nn

# 假设原始单步特征维度为10,批次大小32,序列长度20
batch_input = torch.randn(32, 20, 10)
# 双向LSTM input_size直接设为原始特征维度10,完全可以正常运行
bi_lstm = nn.LSTM(
    input_size=10,
    hidden_size=20,
    bidirectional=True,
    batch_first=True
)
output, _ = bi_lstm(batch_input)
# 输出最后一维是2*hidden_size=40,仅为隐状态拼接的结果
print(output.shape) # 输出:torch.Size([32, 20, 40])

你观察到精度提升的真实原因

你将input_size设置为原始特征数的两倍还能正常运行,说明你在输入LSTM之前一定增加了一层线性投影层,把原始D维特征映射到了2D维。这一步操作相当于给模型增加了可学习的输入特征变换能力,提升了模型整体的表达容量,自然会带来精度提升,和双向LSTM的机制没有任何关联。

验证方法

你可以做两组对照实验验证上述结论:

  • 第一组:将双向LSTM替换为单向LSTM,同样在输入前加线性层把D维特征升到2D,保持input_size=2D,你会观察到精度也会出现相近幅度的提升
  • 第二组:保持双向LSTM的input_size和原始特征数一致,将hidden_size翻倍,你同样会观察到精度提升,本质都是模型参数量增加、表达能力增强带来的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:15:04