Keras向前通过辍学

时间:2017-06-04 05:30:48

标签: tensorflow machine-learning keras dropout

我正在尝试使用dropout来获取神经网络的error estimates

这包括在训练后运行我的网络的几个前进传递,并且激活了丢失。但是,调用model.predict()时似乎没有激活Dropout。这可以在Keras完成,还是我必须把我的重量放在别的地方?

2 个答案:

答案 0 :(得分:1)

可以使用keras后端函数实现随机前向传递(在测试时使用丢失)。假设您有一个训练有素的神经网络model

from keras import backend as K

nb_MC_samples = 100
MC_output = K.function([model.layers[0].input, K.learning_phase()], [model.layers[-1].output])

learning_phase = True  # use dropout at test time
MC_samples = [MC_output([x_test, learning_phase])[0] for _ in xrange(nb_MC_samples)]
MC_samples = np.array(MC_samples)  # [#samples x batch size x #classes]

有关完整实施,请参阅以下ipython notebook

答案 1 :(得分:0)

已在Keras完成,例如项目页面上的this discussion。有关其工作原理的更多信息可以在CS231n: Convolutional Neural Networks for Visual Recognition中找到 - AFAIK在Keras中实现的非常类似。具体做法是:

  

(...)至关重要的是,请注意在预测函数中我们没有放弃   我们正在执行两个隐藏层输出的缩放   这很重要,因为在测试时所有神经元都能看到所有神经元   他们的输入,所以我们想要在测试时的神经元输出   与培训时的预期产出相同。