如何在Keras中向CuDNNGRU或CuDNNLSTM添加重复辍学

时间:2018-12-06 16:55:02

标签: python tensorflow keras lstm cudnn

可以通过将递归值传递为Keras中的基本LSTM或GRU层的参数来对其进行重复施加。

CuDNNLSTM和CuDNNGRU是与CUDA兼容的LSTM和GRU层。主要优点是它们在训练过程中快10倍。但是,它们缺乏Keras中LSTM或GRU层的某些美感,即可以传递丢失或重复出现的丢失值。

虽然我们可以直接在模型中添加Dropout图层,但似乎无法使用Recurrent Dropout来实现。

然后我的问题如下:如何在Keras中向CuDNNGRU或CuDNNLSTM添加重复辍学?

2 个答案:

答案 0 :(得分:2)

我不认为我们可以拥有它,因为它甚至在底层(即cuDNN)中也不受支持。 From François Chollet是Keras的创造者:

  

在cuDNN RNN ops中未实现经常性辍学。在cuDNN级别。所以我们不能在Keras中使用它。

     

cuDNN API中的dropout选项不是周期性的dropout(与Keras中的不一样),因此它基本上没有用(常规dropout在RNN上不起作用)。

     

实际上,在堆叠的RNN中使用此类辍学会破坏培训。

答案 1 :(得分:0)

您可以使用kernel_regularizer和recurrent_regularizer来防止过度拟合,我正在使用L2正则化器,并且效果良好。