2

我正在尝试使用 dropout 来获取神经网络的错误估计。

这涉及在训练后运行我的网络的几次前向传递,并激活 dropout。但是,调用 model.predict() 时似乎没有激活 Dropout。这可以在 Keras 完成,还是我必须在其他地方举重?

4

2 回答 2

1

可以使用 keras 后端功能实现随机前向传递(在测试期间使用 dropout)。假设您有一个训练有素的神经网络,称为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 笔记本

于 2017-09-15T22:34:32.947 回答
0

它已经在 Keras 中完成,请参阅项目页面上的讨论。更多关于它如何工作的信息可以在CS231n: Convolutional Neural Networks for Visual Recognition - AFAIK 中找到,Keras 中有一个非常相似的实现。具体来说:

(...) 至关重要的是,请注意,在预测函数中,我们不再下降,而是按 pp 对两个隐藏层输出进行缩放。这很重要,因为在测试时所有神经元都看到了它们的所有输入,所以我们想要测试时神经元的输出与训练时的预期输出相同。

于 2017-06-04T11:23:31.297 回答