Monte-Carlo Dropout,蒙特卡罗 dropout-程序员宅基地

技术标签: matlab  人工智能  

Monte-Carlo Dropout

Monte-Carlo Dropout(蒙特卡罗 dropout),简称 MC dropout。

一种从贝叶斯理论出发的 Dropout 理解方式,将 Dropout 解释为高斯过程的贝叶斯近似。

云里雾里的,理论证明看起来挺复杂,有兴趣可以参考论文:Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. 以及这篇论文的 Appendix

但其实,MC dropout 用起来就简单了,不需要修改现有的神经网络模型,只需要神经网络模型中带 dropout 层,无论是标准的 dropout 还是其变种,如 drop-connect,都是可以的。

在训练的时候,MC dropout 表现形式和 dropout 没有什么区别,按照正常模型训练方式训练即可。

在测试的时候,在前向传播过程,神经网络的 dropout 是不能关闭的。这就是和平常使用的唯一的区别。

MC dropout 的 MC 体现在我们需要对同一个输入进行多次前向传播过程,这样在 dropout 的加持下可以得到“不同网络结构”的输出,将这些输出进行平均和统计方差,即可得到模型的预测结果及 uncertainty。而且,这个过程是可以并行的,所以在时间上可以等于进行一次前向传播。

神经网络产生的 softmax 概率不能表示 uncertainty?

其实我们在很多时候都拿了 softmax 的概率计算 uncertainty,比如主动学习查询策略中的 least confident、margin、entropy。在 entropy 策略下,softmax 的概率越均匀熵越大,我们就认为 uncertainty 越大;反之,在 softmax 某一维接近 1,其它都接近 0 时,uncertainty 最小。

但是,softmax 值并不能反应该样本分类结果的可靠程度。A model can be uncertain in its predictions even with a high softmax output. [1]

以 MNIST 分类为例,当模型在验证集上面效果很烂的时候,将一张图片输入到神经网络,我们仍然可以得到很高的 softmax 值,这个时候分类结果并不可靠;当模型在验证集上效果很好了,在测试集上甚至都很好,这个时候,我们将一张图片加入一些噪声,或者手写一个数字拍成照片,输入到网络中,这个时候得到一个较高的 softmax 值,我们就认为结果可靠吗?我们这个时候可以理解为,在已知的信息中,模型认为自己做的挺好,而模型本身并不能泛化到所有样本空间中去,对于它没有见过的数据,它的泛化能力可能不是那么强,这个时候模型仍然是以已知的信息对这个没有见过的数据有很强的判断(softmax 某一维值很大),当然有时候判断很好,但有时候判断可能就有误,而模型并不能给出对这个判断有多少 confidence。

而 MC dropout 可以给出一个预测值,并给出对这个预测值的 confidence,这也就是贝叶斯深度学习的优势所在。

MC dropout 示例代码

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

inp = tf.keras.layers.Input(shape=(28, 28))
x = tf.keras.layers.Flatten()(inp)
x = tf.keras.layers.Dense(512, activation=tf.nn.relu)(x)
x = tf.keras.layers.Dropout(0.5)(x, training=True)      # dropout 在训练和测试时都将开着
out = tf.keras.layers.Dense(10, activation=tf.nn.softmax)(x)
model = tf.keras.Model(inp, out)

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=3)
# 在测试过程,dropout 也是打开的,得到的结果将会有波动,而不是完全一致
for _ in range(10):
    print(model.predict(x_test[:1]))

dropout 层一直处于打开的状态,测试过程重复进行多次。

References

[1] Gal, Y., & Ghahramani, Z. (2015). Dropout as a Bayesian Approximation: Representing Model Uncertainty in Deep Learning. Retrieved from http://arxiv.org/abs/1506.02142
[2] Gal, Y., & Ghahramani, Z. (2015). Dropout as a Bayesian Approximation: Appendix. Retrieved from http://arxiv.org/abs/1506.02157

【实验笔记】深度学习中的两种不确定性(上)-- 张子杨
Dropout的前世与今生 -- 机器之心
Deep Bayesian Neural Networks. -- Stefano Cosentino

转载于:https://www.cnblogs.com/wuliytTaotao/p/11509634.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38168559/article/details/101951939

智能推荐

前端面试题集锦(一)-程序员宅基地

文章浏览阅读160次。温馨提示:经常看一些面试题,能够很好的对自己进行查缺补漏,检验自己的能力。1、写出transform中2D转换的几大属性及其作用:答:①translate():根据坐标原点,浏览器左上角(0,0)进行X轴、     Y轴上的位置移动    ②rotate():根据X轴进行旋转,正值时为顺时针,负值时为逆时针。(deg单位)    ③scale(parm1,parm2):根据原大小对其进行放大缩小功能,参数一二对应width和height,和X轴、Y轴。    ④skew(parm1,parm

功率的正负,无功,有功功率,容性感性功率_为什么充电功率是负的-程序员宅基地

文章浏览阅读1.8w次,点赞6次,收藏27次。功率当然有正负之分。比如两台并行的发电机发电驱动一台大功率用电设备。如果两台发电机没有协调好的话,很容易负载偏移,就是一台发电机承受负载大,领一台发电机承受负载小,而这种差距是会逐渐变大的,一直变到一台发电机承受所有的负载的同时,还要带另一台发电机转,另一台发电机不承受任何负载,还要被拉着转,这台发电机就属于负功率了。功率有正负之分所谓正负不应以功率消耗为标准,由于功率的定义是单位时间所做_为什么充电功率是负的

echarts图表的使用及用法-程序员宅基地

文章浏览阅读5.2k次。一、介绍ECharts,一个纯 Javascript 的图表库,可以流畅的运行在PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的 Canvas 类库 ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表。ECharts 提供了常规的折线图,柱状图,散点图,饼图,K线图,用于统计的盒形图,用于地理数据可视化的地图,热力图,线图,用于关系数据可视化的关系图,treemap,多维数据可视化的平行坐标,还_echarts图表

容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?_开源容器平台-程序员宅基地

文章浏览阅读1.2k次。本文由 网易云 发布作者:刘超 来自:网易云基础服务无论是在社区,还是在同客户交流的过程中,总会被问到到底什么时候该用 Docker?什么时候用虚拟机?如果使用容器,应该使用哪个容器平台? 显而易见,我不会直接给大家一个答案,而是希望从技术角度进行分析具体的场景。例如客户是大公司还是小公司,将部署小集群还是大集群,倾向于私有云还是公有云,已经采购了 IaaS 还是没有 IaaS,IT 运维能力..._开源容器平台

Spring MVC 入门(十)Spring MVC 的文件上传和下载_private multipartfile logoimage;-程序员宅基地

文章浏览阅读171次。10.1 文件上传 文件上传是项目开发中最常用的功能。为了实现上传文件,必须将表单的 method 设置为 POST,并将 enctype 设置为 multipart/form-data。这样,浏览器才会把用户选择的文件二进制数据发送给服务器。 设置 enctype 为 multipart/form-d..._private multipartfile logoimage;

bash 脚本中嵌入 expect_bash expect-程序员宅基地

文章浏览阅读7.6k次。在 Ubuntu Terminal\text{Ubuntu Terminal}Ubuntu Terminal 中执行一些命令时总是需要交互式的输入信息,如 Y/N/passwd\text{Y/N/passwd}Y/N/passwd 等等,这可以起到提醒用户的作用,也更加保险。但是有的时候在执行自动化脚本时并不希望一直进行交互式的操作,所以 expect\text{expect}..._bash expect

随便推点

16.忽略大小写的字符串比较_16:忽略大小写的字符串比较-程序员宅基地

文章浏览阅读4.3k次。描述一般我们用strcmp可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按ASCII码值大小比较),直到出现不同的字符或遇到'\0'为止。如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准(注意:如果某个字符串遇到'\0'而另一个字符串还未遇到'\0',则前者小于后者)。但在有些时候,我们比较字符串的大小时,希望忽略字母的大小_16:忽略大小写的字符串比较

使用labelme制作自己的语义分割数据集_使用labelme训练自己的语义分割流程-程序员宅基地

文章浏览阅读1.4k次,点赞2次,收藏24次。安装labelme在cmd中激活我们使用的python环境,然后使用pip命令安装labelme,命令如下:pip install labelme==3.16.7注意:如果安装最新版本的 labelme,就无须指定版本号(3.16.7就是版本号)打开labelme在cmd中激活我们使用的python环境,然后使用下面的命令,就可以打开labelme软件:labelme界面如下图:使用labelme对数据集进行标注标注之前我们可以先设置一下自动保存:file——>Sav_使用labelme训练自己的语义分割流程

跟随小破站学习java web第十五天_小破站的学习陪伴-程序员宅基地

文章浏览阅读262次。file_upload.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><h..._小破站的学习陪伴

java解析定长文件入库_java-当直到运行时才知道记录布局时,使用哪种方法来解析具有固定长度记录的文件?...-程序员宅基地

文章浏览阅读392次。我想基于另一个文件中提供的记录布局来解析文件.基本上会有一个定义文件,它是一个用逗号分隔的字段及其各自长度的列表.其中会有很多,每次我运行程序时都会加载一个新的.firstName,text,20middleInitial,text,1lastName,text,20salary,number,10然后,我将显示一个带有提供的列标题的空白表,以及一个通过单击按钮或其他方式添加数据的选项-我尚未决定..._java 文本文件定长记录

week10限时大模拟_B -团队聚餐_s,vb不是在你那边可能在部门聚餐:u女包~、{k:↑二:、:-程序员宅基地

文章浏览阅读178次。B - 团队聚餐题目描述TA团队每周都会有很多任务,有的可以单独完成,有的则需要所有人聚到一起,开过会之后才能去做。但TA团队的每个成员都有各自的事情,找到所有人都有空的时间段并不是一件容易的事情。给出每位助教的各项事情的时间表,你的任务是找出所有可以用来开会的时间段。输入格式第一行一个数T(T≤100),表示数据组数。对于每组数据,第一行一个数m(2 ≤ m ≤ 20),表示TA..._s,vb不是在你那边可能在部门聚餐:u女包~、{k:↑二:、:

利用MyBatis来做多表查询_mapper localdatetime[] 为条件查询-程序员宅基地

文章浏览阅读830次。目录一对一查询一对多查询 动态SQL的使用 标签 标签 标签 先创建好查询方法以及方法实现:在数据库中,建立userinfo表和articleinfo表的关系(一篇文章对应一个作者):结果:可以看到并没有将user 信息查询出来,所以这样的查询方式不对。正确的操作方法如下: 结果: 在上面标签里面的user一定要和Articleinfo里面的user一致,不然就查询不到数据了先创建好查询方法以及方法实现:在数据库中,建立userinfo表_mapper localdatetime[] 为条件查询

推荐文章

热门文章

相关标签