基于keras的CNN的蒙特卡罗dropout

基于keras的CNN的蒙特卡罗dropout

在利用keras或者tensorflow.keras写CNN时,一般会利用dropout层来防止CNN的过拟合。此时,除了一般如loss和val_accuracy之外,基于蒙特卡罗方法dropout的模型不确定性(uncertainty)估计也是很重要的。不确定性过高会导致模型的泛型不足。

蒙特卡罗dropout的原理就是在CNN模型开启dropout的同时,对同一测试集反复进行概率预测,由于每次动用的node不同,每一次的预测结果都会有些许不同。

之后对多次预测的平均概率进行总结(ie分类)。最后,计算此分类结果与真实值的正确率(accuracy rate)就是对我们当前CNN模型的不确定性预测。

除了分类问题外, 回归问题也可使用蒙特卡罗dropout, 但其不确定性没法像分类问题那样直接反应为一个指数。像引用2的英文博客中, 作者也只对单一实例test example的结果画直方图而已。笔者觉得也许将所有实例取方差的均值作为指数,待讨论

值得注意的是,在keras框架下如果在构建CNN时没有对tf.keras.layers.Dropout进行提前设置,那dropout只在训练状态下被激活,而在测试时默认关闭

这种情况下,只要在model.predict(test_data)时加入超参training为True,模型就可以自动启动dropout:

model.predict

你可能感兴趣的:(python编程,神经网络,卷积神经网络,keras,蒙特卡罗,dropout)