如何在 keras 上的变分 dropout LSTM 层上使用 MC Dropout



我目前正在尝试使用Keras(tensorflow后端)建立一个(LSTM)递归神经网络。我想在上面使用带有 MC Dropout 的变分辍学。我相信变分辍学已经使用 LSTM 层的选项"recurrent_dropout"实现,但我找不到任何方法可以像经典的 Dropout 层那样设置一个"训练"标志来放置

这在 Keras 中非常简单,首先您需要定义一个同时接受模型输入和learning_phase的函数:

import keras.backend as K
f = K.function([model.layers[0].input, K.learning_phase()],
               [model.layers[-1].output])

对于具有多个输入/输出的函数式 API 模型,您可以使用:

f = K.function([model.inputs, K.learning_phase()],
               [model.outputs])

然后,您可以像f([input, 1])一样调用此函数,这将告诉 Keras 在此调用期间启用学习阶段,执行 Dropout。然后,您可以多次调用此函数并组合预测以估计不确定性。

"Dropout as a Bayesian Approximation: RepresentationModel Uncertainin Deep Learning"(2015)的源代码位于 https://github.com/yaringal/DropoutUncertaintyExps/blob/master/net/net.py。他们还使用Keras,代码很容易理解。在没有顺序 api 的情况下使用 Dropout 层,以便传递训练参数。这是对Matias建议的不同方法:

inter = Dropout(dropout_rate)(inter, training=True)

最新更新