【发布时间】:2017-11-05 04:06:23
【问题描述】:
我正在尝试使用 dropout 为神经网络获取 error estimates。
这涉及在训练后运行我的网络的几次前向传递,并激活 dropout。但是,调用 model.predict() 时似乎没有激活 Dropout。这可以在 Keras 中完成,还是我必须在其他地方举重?
【问题讨论】:
标签: tensorflow machine-learning keras dropout
我正在尝试使用 dropout 为神经网络获取 error estimates。
这涉及在训练后运行我的网络的几次前向传递,并激活 dropout。但是,调用 model.predict() 时似乎没有激活 Dropout。这可以在 Keras 中完成,还是我必须在其他地方举重?
【问题讨论】:
标签: tensorflow machine-learning keras dropout
可以使用 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 notebook。
【讨论】:
它已经在 Keras 中完成,参见例如this discussion 在项目页面上。更多关于它如何工作的信息可以在 CS231n: Convolutional Neural Networks for Visual Recognition 中找到——AFAIK 一个非常相似的实现是在 Keras 中。具体来说:
(...) 至关重要的是,请注意,在 predict 函数中,我们没有丢弃 不再,但我们正在执行两个隐藏层输出的缩放 由 pp. 这很重要,因为在测试时所有神经元都能看到 他们的输入,所以我们希望测试时神经元的输出是 与他们在训练时的预期输出相同。
【讨论】: