几天来,我正在尝试使用LSTM构建一个简单的正弦波序列生成,到目前为止还没有任何成功的一瞥 .
我从time sequence prediction example开始
我想要做的就是:
-
使用与LBFGS不同的优化器(例如RMSprob)
-
尝试不同的信号(更多正弦波分量)
这是my code的链接 . "experiment.py"是主文件
我所做的是:
-
我生成人工时间序列数据(正弦波)
-
我将这些时间序列数据剪切成小序列
-
我模型的输入是时间序列0 ... T,输出是时间序列1 ... T 1
会发生什么:
-
培训和验证损失平稳下降
-
测试损失非常低
-
但是,当我尝试从种子(测试数据中的随机序列)开始生成任意长度的序列时,一切都会出错 . 输出总是平坦的
我根本看不出问题所在 . 我现在正在玩这个星期一周,没有任何进展 . 我会非常感谢任何帮助 .
谢谢
1 回答
这是正常的行为,因为您的网络对输入的质量过于自信,并且没有学会依赖过去(在其内部状态上),依赖于输入 . 当您在生成设置中将网络应用于其自己的输出时,网络的输入不如在获得真实输入的训练或验证情况下那样可靠 .
我有两种可能的解决方案:
第一个是最简单但不太直观的一个:在输入中添加一点高斯噪声 . 这将迫使网络更多地依赖其隐藏状态 .
第二个,是最明显的解决方案:在训练期间,它不是真正的输入,而是以一定的概率p生成输出 . 开始训练p = 0并逐渐增加它,以便它独立地学习更长和更长的序列 . 这称为调度采样,您可以在此处阅读更多相关信息:https://arxiv.org/abs/1506.03099 .