LSTM网络在几次迭代后开始生成垃圾

问题描述 投票:1回答:1

我有一个大约7M字符的大型文本语料库,我正在训练LSTM网络。然而,我一直看到,在大约第五个时代之后,而不是生成的句子改进,他们变得完全垃圾。我在下面粘贴了一个例子:

Generating with seed: "n who is in possession of the biggest ro"
n who is in possession of the biggest ro to   tato ton ant an to  o  
ona toon t o o taon  an s to  ao t tan t  tout att tj ton  an o  t an $

我也尝试过不同的温度。上面粘贴的例子是最保守的。这是另一代:

Generating with seed: 'to sin, and most of the known world is n'
to sin, and most of the known world is na ararea t tarre a araa arae 
tor tae a a aaa aaata ater tje aea arare ar araererrt tmaear araae

为了调试,我最终复制粘贴LSTM example from keras并在我的语料库上训练它。再次,在迭代5周围,它开始生成垃圾。

关于如何调试这个或者这可能是签名的任何想法?它从更加连贯的预测开始,但突然下降。

python tensorflow deep-learning keras lstm
1个回答
1
投票

通常,5个时代通常为时尚早,无法得出结论。 RNN可以生成看起来不像垃圾的文本,尽管它仍然没有学到任何东西。因此,如果采样文本在每次迭代时明显降低,您应该开始担心,否则只需让它学习。

当发生这种情况时,首先要检查的是概率分布如何随时间演变。例如,这个样本

a ararea t tarre a araa arae 
tor tae a a aaa aaata ater tje aea arare ar araererrt tmaear araae

...清楚地表明a概率太高。我不认为你的训练数据中有很多aa重复,因此后续aaata应该是非常不可能的。要检查这一点,请打印最大概率分数以及它对应的字符(分发摘要也会这样做)。如果你看到这个概率提高,那几乎肯定是问题所在。

可能有多种原因,从数据处理或输入管道错误开始,到网络布线错误结束。例如,我看到的一个特定错误与索引0相关,它对应于未知的字符或填充,但实际上LSTM将其视为有效字符。由于它们很多,网络才知道这一点,因此它的概率上升了。

© www.soinside.com 2019 - 2024. All rights reserved.