为什么我的LSTM时间序列预测在测试数据上会周期性地出现急剧的向下跳变?
我在用PyTorch的 LSTM模型来预测谷歌股票价格。
然而在训练我的模型并绘制预测结果与真实值的对比后,我发现出现周期性且明显的向下尖刺。
这是我在Kaggle上写的笔记本: Notebook in kaggle
下面是我在训练中所做步骤的摘要:
- 我打算只预测谷歌股价中的一个特征,即开盘价(Open)。
- 我将数据分成训练集和测试集,训练集占80%,测试集占20%。
- 我使用sklearn的 MinMaxScaler(),仅基于训练数据来拟合缩放器,然后对训练数据和测试数据进行变换(缩放)。
- 我将序列长度设为10。
- 对于LSTM模型,我设定input_size = 1、hidden_size = 64、num_layers = 2。
self.lstm = nn.LSTM(1, hidden_size, num_layers) self.fc = nn.Linear(hidden_size, 1) - 我将batch_size设置为64,并且不打乱数据(因为在训练时序数据时,我了解到不应打乱)。
- 我将学习率learning_rate设置为0.001,训练轮次设为3,使用torch.optim.Adam进行优化,损失函数采用nn.MSELoss()。
- 训练完成后,当我将测试数据的真实值(蓝色)与预测值(紫色)对比绘制时,我看到出现周期性且明显的向下尖刺。

我不知道为什么会这样,我把batch_size设为1,也尝试用不同于10的序列长度(不同的窗口大小)进行训练,但仍然看到周期性且明显的向下尖刺。
我是深度学习新手,最近才刚学习过LSTM,我不确定这是为什么以及该如何修复。
解决方案
我终于弄清楚了问题所在。
我将训练轮次增加到了100。
结果要好得多。
我完全不知道应该设置多少个训练轮次。
将训练轮次增加到100的结果如下。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
