4

我目前正在尝试使用 Keras(tensorflow 后端)建立一个(LSTM)循环神经网络。我想使用带有 MC Dropout 的变分 dropout。我相信变分 dropout 已经通过 LSTM 层的选项“recurrent_dropout”实现,但我没有找到任何方法来设置“training”标志以像经典的 Dropout 层那样设置为 true。

4

2 回答 2

2

“Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning”(2015)的源代码位于https://github.com/yaringal/DropoutUncertaintyExps/blob/master/net/net.py。他们也使用 Keras,代码很容易理解。为了传递训练参数,Dropout 层在没有Sequential api 的情况下使用。这是对 Matias 建议的不同方法:

inter = Dropout(dropout_rate)(inter, training=True)
于 2019-06-10T19:20:12.373 回答
2

这在 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。然后你可以多次调用这个函数并结合预测来估计不确定性。

于 2019-01-22T18:09:48.957 回答