首页 文章

使用PyTorch生成LSTM时序

提问于
浏览
20

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

我从time sequence prediction example开始

我想要做的就是:

  • 使用与LBFGS不同的优化器(例如RMSprob)

  • 尝试不同的信号(更多正弦波分量)

这是my code的链接 . "experiment.py"是主文件

我所做的是:

  • 我生成人工时间序列数据(正弦波)

  • 我将这些时间序列数据剪切成小序列

  • 我模型的输入是时间序列0 ... T,输出是时间序列1 ... T 1

会发生什么:

  • 培训和验证损失平稳下降

  • 测试损失非常低

  • 但是,当我尝试从种子(测试数据中的随机序列)开始生成任意长度的序列时,一切都会出错 . 输出总是平坦的

Shape of the generated signal

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

谢谢

1 回答

  • 7

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

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

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

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

相关问题