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

LSTM训练模型预测结果恒为无波动水平线的问题排查求助

LSTM训练模型预测结果恒为无波动水平线的问题排查求助

大家好,我最近在训练一个LSTM模型做时序预测,但碰到了非常棘手的问题——模型训练后的预测结果始终是一条没有任何波动的水平线,完全没法拟合数据的真实趋势。我把自己写的模型代码贴在下面,想请各位大佬帮忙排查下可能的问题,谢谢大家了!

我的LSTM模型代码如下:

class Net(nn.Module):
    def __init__(self,input_size,hidden_size,num_layers,output_size,batch_size,seq_length) -> None:
        super(Net,self).__init__()
        self.input_size=input_size
        self.hidden_size=hidden_size
        self.num_layers=num_layers
        self.output_size=output_size
        self.batch_size=batch_size
        self.seq_length=seq_length
        self.num_directions=1 
        self.liner1 = nn.Linear(input_size, hidden_size)
        self.relu = nn.ReLU()
        self.liner2 = nn.Linear(num_layers*hidden_size, output_size)
        self.dropout = nn.Dropout(0.2)
 
        self.lstm=nn.LSTM(input_size=hidden_size,hidden_size=hidden_size,num_layers=num_layers,batch_first=True,dropout=0.2) # LSTM
 
    def forward(self,x):
        batchsize = x.shape[0]
        x = self.liner1(x)
        x = self.relu(x)
 
        h_0 = torch.randn(self.num_directions * self.num_layers, x.size(0), self.hidden_size).to('cuda')
        c_0 = torch.ran...

注:c_0的代码被截断了,实际是类似torch.randn(...)的初始化逻辑。

目前我自己怀疑的几个方向,但还没找到问题所在:

  • 是不是LSTM的输入输出维度匹配出了问题?比如batch_first=True的情况下,输入形状有没有符合要求?
  • 每次前向传播都重新随机初始化h_0和c_0是不是不合理?是不是应该让模型自己维护隐藏状态,而不是每次都随机生成?
  • 全连接层的维度设置num_layers*hidden_size有没有问题?是不是应该取LSTM输出的最后一个时间步的隐藏状态来输入到全连接层?
  • 有没有可能是数据预处理(比如归一化)的问题?不过目前我还没发现数据处理环节有明显错误。

如果各位有其他排查思路或者发现代码里的问题,欢迎指点!

备注:内容来源于stack exchange,提问作者user24521131

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:04:40