用于文本生成的Keras LSTM不断重复一行或一个序列

one*_*rtz 6 python deep-learning lstm keras recurrent-neural-network

我大致遵循了本教程:

https://machinelearningmastery.com/text-generation-lstm-recurrent-neural-networks-python-keras/

一个显着的区别是,我使用2个LSTM层与辍学。我的数据集是不同的(音乐数据集是abc表示法)。我确实生成了一些歌曲,但是在生成过程中经过一定数量的步骤(可能从30步到几百步)之后,LSTM不断重复生成完全相同的序列。例如,它曾经陷入了为歌曲生成URL的困境:

F:http : //www.youtube.com/watch?v=JPtqU6pipQI

等等 ...

它曾经一度被困于生成相同的两首歌(这两首歌是大约300个字符的序列)。在开始时,它产生了3-4个好的乐曲,但是之后,它几乎无限地保持了两首歌曲的再生。

我想知道,是否有人对可能发生的事情有所了解?

我想澄清的是,无论是重复还是不重复,生成的任何序列似乎都是新的(模型没有记忆性)。验证损失和培训损失按预期减少。Andrej Karpathy能够生成包含数千个字符的文档,但我找不到这种无限期卡住的模式。

http://karpathy.github.io/2015/05/21/rnn-efficiency/

Sha*_*kol 4

不要在预测输出上采用 argmax,而是尝试引入一些随机性,如下所示:

np.argmax(prediction_output)[0])
Run Code Online (Sandbox Code Playgroud)

np.random.choice(len(prediction_output), p=prediction_output)
Run Code Online (Sandbox Code Playgroud)

我已经在这个重复序列问题上苦苦挣扎了一段时间,直到我发现了这个 Colab 笔记本,我在其中弄清楚了为什么他们的模型能够生成一些非常好的样本: https: //colab.research.google.com/github/tensorflow /tpu/blob/master/tools/colab/shakespeare_with_tpu_and_keras.ipynb#scrollTo=tU7M-EGGxR3E

在我更改了这一行之后,我的模型从一遍又一遍地生成几个单词变成了一些真正有趣的东西!