gpt4 book ai didi

python - CuDNNLSTM(而不是 LSTM)层的意外结果

转载 作者:太空狗 更新时间:2023-10-30 01:17:53 24 4
gpt4 key购买 nike

我已将此问题发布为 issue在 Keras 的 Github 中,但认为它可能会在这里吸引更广泛的受众。


系统信息

  • 我是否编写了自定义代码(而不是使用示例目录):对官方 Keras 教程的最小更改
  • 操作系统平台和发行版(例如 Linux Ubuntu 16.04):Ubuntu 18.04.2 LTS
  • TensorFlow 后端(是/否):
  • TensorFlow 版本:1.13.1
  • Keras 版本:2.2.4
  • Python 版本:3.6.5
  • CUDA/cuDNN 版本:10.1
  • GPU型号和内存:Tesla K80 11G

描述当前行为
我正在执行来自 Seq2Seq tutorial 的代码.我所做的唯一更改是将 LSTM 层替换为 CuDNNLSTM。发生的事情是模型预测我给它的任何输入的固定输出。当我运行原始代码时,我得到了合理的结果。

描述预期的行为
请参阅上一节。

重现问题的代码
取自here .只需将 LSTM 替换为 CuDNNLSTM。


非常感谢任何见解。

最佳答案

所以这里有两个问题。
CuDNNLSTM参数调整的使用。
基本上,网络在您的数据集上过度拟合,导致每个输入的输出只有一个句子。这既不是 CuDNNLSTM 的错,也不是 LSTM 的错。

首先,
CuDNN 与常规 LSTM 有一些不同的数学,使其与 Cuda 兼容并运行得更快。 LSTM 需要 11 秒才能在 eng-hindi 文件上运行您使用的相同代码,而 CuDNNLSTM 每个时期需要 1 秒。

在 CuDNNLSTM 中,time_major 参数设置为 false。由于这个原因,网络过拟合。可以查一下here .
您可以清楚地看到对于像 eng-hin 或 eng-marathi 这样的小型数据集,val-loss 在 30 个时期后增加。在您的 network loss 减少而 val_loss 增加的地方运行更多的网络是没有意义的。 LSTM 的情况也是一样。

这里您需要针对小型数据集进行参数调优

以下是一些可以提供帮助的链接:

  1. Eng-Mar
  2. Pytorch translation tutorial
  3. Similar Question 2Similar Question 2
  4. NMT-keras

关于python - CuDNNLSTM(而不是 LSTM)层的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56801148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com