我目前正在尝试使用Keras(tensorflow后端)建立一个(LSTM)循环神经网络。 我想使用带有MC Dropout的变体辍学。 我相信LSTM层的选项“ recurrent_dropout”已经实现了变体辍学,但我找不到任何方法像传统的Dropout层一样设置“ training”标志来置为真。
答案 0 :(得分:1)
这在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。然后,您可以多次调用此函数,并将预测结合起来以估计不确定性。
答案 1 :(得分:0)
“作为贝叶斯近似降落:表示深度学习中的模型不确定性”(2015年)的源代码位于https://github.com/yaringal/DropoutUncertaintyExps/blob/master/net/net.py。他们还使用Keras,代码很容易理解。 Dropout层不使用 Sequential api来传递训练参数。这是Matias提出建议的另一种方法:
inter = Dropout(dropout_rate)(inter, training=True)