簡體   English   中英

如何在 Keras 中向 CuDNNGRU 或 CuDNNLSTM 添加循環丟失

[英]How to add recurrent dropout to CuDNNGRU or CuDNNLSTM in Keras

通過將其值作為層的參數傳遞,可以將循環丟失應用於 Keras 中的基本 LSTM 或 GRU 層。

CuDNNLSTM 和 CuDNNGRU 是與 CUDA 兼容的 LSTM 和 GRU 層。 主要優勢是它們在訓練期間的速度提高了 10 倍。 然而,它們缺乏 Keras 中 LSTM 或 GRU 層的一些優點,即傳遞 dropout 或循環 dropout 值的可能性。

雖然我們可以直接在模型中添加 Dropout 層,但似乎我們不能使用 Recurrent Dropout 來做到這一點。

那么我的問題是: How to add recurrent dropout to CuDNNGRU or CuDNNLSTM in Keras?

我不認為我們可以擁有它,因為它甚至在低級別(即 cuDNN)中不受支持。 來自 Keras 的 François Chollet的創造者:

cuDNN RNN ops 中未實現循環丟失。 在 cuDNN 級別。 所以我們不能在 Keras 中擁有它。

cuDNN API 中的 dropout 選項不是 recurrent dropout(與 Keras 中的不同),因此它基本上沒有用(常規 dropout 不適用於 RNN)。

實際上在堆疊式 RNN 中使用這樣的 dropout 會破壞訓練。

您可以使用 kernel_regularizer 和 recurrent_regularizer 來防止過度擬合,我使用的是 L2 正則化器並且我取得了不錯的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM