【发布时间】:2018-04-17 22:53:15
【问题描述】:
我大致遵循了这个教程:
https://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/
一个显着的区别是我使用了 2 个带 dropout 的 LSTM 层。我的数据集不同(abc 表示法的音乐数据集)。我确实生成了一些歌曲,但是在生成过程中经过一定数量的步骤(可能从 30 步到几百步不等)之后,LSTM 会一遍又一遍地生成完全相同的序列。例如,它曾经陷入为歌曲生成 URL 的难题:
F:http://www.youtube.com/watch?v=JPtqU6pipQI
等等……
它也曾经被困在生成相同的两首歌曲(这两首歌曲是大约 300 个字符的序列)。一开始它产生了 3-4 首好歌曲,但之后,它几乎无限期地不断地再生这两首歌。
我想知道,有人对可能发生的事情有所了解吗?
我想澄清一下,无论是重复还是非重复,生成的任何序列似乎都是新的(模型不记忆)。验证损失和训练损失按预期减少。 Andrej Karpathy 能够生成包含数千个字符的文档,但我找不到这种无限期卡住的模式。
【问题讨论】:
-
尝试使用
stateful模式以连接连续的代。 -
嗯我试图避免这种情况,但我会尝试的。谢谢你的建议:)
-
我发现增加构成我的长序列的样本长度(子批次)会产生很大的不同,而不必使用 stateful。一个可能值得尝试的简单修复。
-
@Phil 你能多谈谈你的工作和这个观察吗?应用程序域是什么,您的输入序列前后多长时间?在您增加输入的“回溯”大小之前,您的模型是否生成了相同的输出?我很好奇,因为我现在面临同样的问题。 @MarcinMożejko 您能否详细说明为什么将
stateful设置为 True 有助于防止模型记住输入并循环返回看到的值? -
@duhaime 我有一段时间没有接触这个项目了,但我可以凭记忆告诉你。该域是在时间序列的每个步骤中生成多达 16 个参数(为语音生成提供声码器)。也就是说,我认为我最终确实设法调试了有状态使用,但它并没有真正帮助我。有兴趣的项目说明在这里:babble-rnn.consected.com
标签: python deep-learning keras lstm recurrent-neural-network