使用PyTorch

时间:2017-04-17 20:23:11

标签: python machine-learning deep-learning lstm pytorch

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

我是从time sequence prediction example

开始的

我想要做的就是:

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

这是my code的链接。 “experiment.py”是主文件

我的工作是:

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

会发生什么:

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

Shape of the generated signal

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

谢谢

1 个答案:

答案 0 :(得分:8)

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

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

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

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