如何在keras上的变差LSTM层上使用MC差?

如何在keras上的变差LSTM层上使用MC差?,keras,lstm,keras-layer,dropout,Keras,Lstm,Keras Layer,Dropout,我目前正试图用Keras(tensorflow后端)建立一个(LSTM)递归神经网络。 我想用变分辍学和MC辍学。 我相信变分辍学已经通过LSTM层的“反复辍学”选项实现了,但我没有找到任何方法设置“训练”标志,使其像经典辍学层一样成为真的。这在Keras中非常容易,首先,您需要定义一个函数,该函数同时接受模型输入和学习阶段: import keras.backend as K f = K.function([model.layers[0].input, K.learning_phase()],

我目前正试图用Keras(tensorflow后端)建立一个(LSTM)递归神经网络。 我想用变分辍学和MC辍学。
我相信变分辍学已经通过LSTM层的“反复辍学”选项实现了,但我没有找到任何方法设置“训练”标志,使其像经典辍学层一样成为真的。

这在Keras中非常容易,首先,您需要定义一个函数,该函数同时接受模型输入和学习阶段:

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在调用过程中启用学习阶段,执行退出。然后,您可以多次调用此函数并结合预测来估计不确定性。

关于“作为贝叶斯近似的辍学:在深度学习中表示模型不确定性”(2015)的源代码位于。他们也使用Keras,代码很容易理解。为了通过训练参数,在不使用顺序api的情况下使用退出层。这与Matias的建议不同:

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

谢谢你的回答。这是Yarin Gal用于Bayesian RNN实现的工作。它是否像下面的示例那样工作?我运行了它,它似乎起了作用,但keras文档对它的描述很模糊。。。示例:inputs=keras.Input(shape=(10))x=keras.layers.LSTM(10,经常性_辍学=0.5)(inputs,training=True)