我在Keras的Github中以issue的形式发布了这个问题,但认为它可能会在这里吸引更多的受众。
系统信息
描述当前行为
我正在执行Seq2Seq tutorial中的代码。我所做的唯一且唯一的更改是将 LSTM 层替换为 CuDNNLSTM 。发生的事情是该模型为我提供的任何输入预测了固定的输出。当我运行原始代码时,会得到明智的结果。
描述预期的行为
请参阅上一节。
重现该问题的代码
取自here。只需用CuDNNLSTM替换LSTM。
任何见解都会受到赞赏。
答案 0 :(得分:3)
所以这里有两个问题。
使用CuDNNLSTM
和parameter tuning
。
基本上,网络在您的数据集上过拟合,导致输出对于每个输入而言仅是一个句子。这既不是CuDNNLSTM
也不是LSTM
的错。
首先,
CuDNN
的数学运算与常规LSTM
略有不同,以使其兼容Cuda并运行得更快。对于您使用的相同代码,LSTM
在eng-hindi文件上运行需要11秒钟,而每个时期CuDNNLSTM
则需要1秒钟。
在CuDNNLSTM time_major
中,参数设置为false
。因此,网络过大。您可以here对其进行检查。
您可以清楚地看到,对于像eng-hin或eng-marathi这样的小型数据集,val-loss
在30个纪元后会增加。在network loss
不断减少而val_loss
不断增加的情况下,没有更多地运行网络。 LSTM
的情况也是如此。
这里需要param tuning
用于小型数据集。
以下一些链接可以提供帮助: