使用PyTorch生成LSTM时序

OSM*_*OSM 21 python machine-learning deep-learning lstm pytorch

几天来,我正在尝试使用LSTM构建一个简单的正弦波序列生成,到目前为止还没有任何成功的一瞥.

我从时间序列预测示例开始

我想要做的就是:

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

这是我的代码的链接."experiment.py"是主文件

我所做的是:

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

会发生什么:

  • 培训和验证损失平稳下降
  • 测试损失非常低
  • 但是,当我尝试从种子(测试数据中的随机序列)开始生成任意长度的序列时,一切都会出错.输出总是平坦的

生成信号的形状

我根本看不出问题所在.我现在正在玩这个星期一周,没有任何进展.我会非常感谢任何帮助.

谢谢

pat*_*_ai 8

这是正常的行为,因为你的网络对输入的质量过于自信,并且没有学会依赖过去(在它的内部状态上),依赖于输入.当您在生成设置中将网络应用于其自己的输出时,网络的输入不如在获得真实输入的训练或验证情况下那样可靠.

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

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

  • 第二种,是最明显的解决方案:在训练期间,它不是真正的输入,而是以一定的概率p生成输出.开始训练p = 0并逐渐增加它,以便它独立地学习更长和更长的序列.这称为调度采样,您可以在此处阅读更多相关信息:https://arxiv.org/abs/1506.03099.