利用PyTorch生成LSTM时间序列

2024-06-25 06:13:03 发布

您现在位置:Python中文网/ 问答频道 /正文

几天来,我一直在尝试使用LSTM来构建一个简单的正弦波序列生成,目前还没有任何成功的迹象。在

我从time sequence prediction example开始

我想做的不同的是:

  • 使用不同于LBFGS的优化器(例如RMSprob)
  • 尝试不同的信号(更多的正弦波分量)

这是指向my code的链接。“实验.py“是主文件

我要做的是:

  • 我生成人工时间序列数据(正弦波)
  • 我把这些时间序列数据切成小序列
  • 我的模型的输入是时间序列0…T,输出是时间序列1…T+1

结果是:

  • 培训和验证损失顺利减少
  • 测试损耗很低
  • 然而,当我试图从一个种子(测试数据中的随机序列)开始生成任意长度的序列时,一切都会出错。输出总是平缓

Shape of the generated signal

我根本不明白问题出在哪里。我已经玩了一个星期了,没有任何进展。 我将非常感谢你的帮助。在

谢谢你


Tags: 数据time信号example时间序列分量指向
1条回答
网友
1楼 · 发布于 2024-06-25 06:13:03

这是正常的行为,发生这种情况是因为你的网络对输入的质量过于自信,没有学会充分依赖过去(依赖于它的内部状态),只依赖于输入。当您在生成设置中将网络应用于其自身的输出时,网络的输入不如在获得真实输入的培训或验证案例中那样可靠。在

我有两个可能的解决方案:

  • 第一种是最简单但不太直观的方法:在输入中添加一点高斯噪声。这将迫使网络更加依赖其隐藏状态。

  • 第二种是最明显的解决方案:在训练过程中,以一定概率p给它输入而不是真实的输入,而是它产生的输出。从p=0开始训练,逐渐增加它,使它学会独立地综合越来越长的序列。这称为计划抽样,您可以在这里阅读更多关于它的内容:https://arxiv.org/abs/1506.03099

相关问题 更多 >