如何在 Keras 中向 CuDNNGRU 或 CuDNNLSTM 添加循环丢失

Xem*_*ema 5 python lstm keras tensorflow

通过将其值作为层的参数传递,可以将循环 dropout 应用于 Keras 中的基本 LSTM 或 GRU 层。

CuDNNLSTM 和 CuDNNGRU 是与 CUDA 兼容的 LSTM 和 GRU 层。主要优点是它们在训练过程中的速度提高了 10 倍。然而,它们缺乏 Keras 中 LSTM 或 GRU 层的一些优点,即传递 dropout 或 recurrent dropout 值的可能性。

虽然我们可以直接在模型中添加 Dropout 层,但似乎我们不能用 Recurrent Dropout 来做到这一点。

我的问题是:如何在 Keras 中向 CuDNNGRU 或 CuDNNLSTM 添加循环丢失?

tod*_*day 6

我不认为我们可以拥有它,因为它在低级别(即 cuDNN)中甚至不受支持。来自 Keras 的创造者François Chollet

cuDNN RNN ops 中没有实现循环 dropout。在 cuDNN 级别。所以我们不能在 Keras 中使用它。

cuDNN API 中的 dropout 选项不是循环 dropout(与 Keras 中的不同),因此它基本上没用(常规 dropout 不适用于 RNN)。

实际上在堆叠 RNN 中使用这种 dropout 会破坏训练。