浅谈pytorch中的BN层的注意事项


Posted in Python onJune 23, 2020

最近修改一个代码的时候,当使用网络进行推理的时候,发现每次更改测试集的batch size大小竟然会导致推理结果不同,甚至产生错误结果,后来发现在网络中定义了BN层,BN层在训练过程中,会将一个Batch的中的数据转变成正太分布,在推理过程中使用训练过程中的参数对数据进行处理,然而网络并不知道你是在训练还是测试阶段,因此,需要手动的加上,需要在测试和训练阶段使用如下函数。

model.train() or model.eval()

BN类的定义见pytorch中文参考文档

补充知识:关于pytorch中BN层(具体实现)的一些小细节

最近在做目标检测,需要把训好的模型放到嵌入式设备上跑前向,因此得把各种层的实现都用C手撸一遍,,,此为背景。

其他层没什么好说的,但是BN层这有个小坑。pytorch在打印网络参数的时候,只打出weight和bias这两个参数。咦,说好的BN层有四个参数running_mean、running_var 、gamma 、beta的呢?一开始我以为是pytorch把BN层的计算简化成weight * X + bias,但马上反应过来应该没这么简单,因为pytorch中只有可学习的参数才称为parameter。上网找了一些资料但都没有说到这么细的,毕竟大部分用户使用时只要模型能跑起来就行了,,,于是开始看BN层有哪些属性,果然发现了熟悉的running_mean和running_var,原来pytorch的BN层实现并没有不同。这里吐个槽:为啥要把gamma和beta改叫weight、bias啊,很有迷惑性的好不好,,,

扯了这么多,干脆捋一遍pytorch里BN层的具体实现过程,帮自己理清思路,也可以给大家提供参考。再吐槽一下,在网上搜“pytorch bn层”出来的全是关于这一层怎么用的、初始化时要输入哪些参数,没找到一个pytorch中BN层是怎么实现的,,,

众所周知,BN层的输出Y与输入X之间的关系是:Y = (X - running_mean) / sqrt(running_var + eps) * gamma + beta,此不赘言。其中gamma、beta为可学习参数(在pytorch中分别改叫weight和bias),训练时通过反向传播更新;而running_mean、running_var则是在前向时先由X计算出mean和var,再由mean和var以动量momentum来更新running_mean和running_var。所以在训练阶段,running_mean和running_var在每次前向时更新一次;在测试阶段,则通过net.eval()固定该BN层的running_mean和running_var,此时这两个值即为训练阶段最后一次前向时确定的值,并在整个测试阶段保持不变。

以上这篇浅谈pytorch中的BN层的注意事项就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Python中的urllib模块使用详解
Jul 07 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
在pandas中一次性删除dataframe的多个列方法
Apr 10 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
Apr 22 Python
Python操作redis实例小结【String、Hash、List、Set等】
May 16 Python
Django项目使用CircleCI的方法示例
Jul 14 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python加载自定义词典实例
Dec 06 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
opencv实现图像平移效果
Mar 24 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 #Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 #Python
pytorch掉坑记录:model.eval的作用说明
Jun 23 #Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 #Python
python2和python3哪个使用率高
Jun 23 #Python
python使用QQ邮箱实现自动发送邮件
Jun 22 #Python
浅谈keras中loss与val_loss的关系
Jun 22 #Python
You might like
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
js调用图片隐藏&显示实现代码
2013/09/13 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
简单的网页广告特效实例
2017/08/19 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
详解一个小实例理解js原型和继承
2019/04/24 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
英国现代绅士品牌:Hackett
2017/12/17 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
个人应聘自我评价分享
2013/11/18 职场文书
单位推荐信范文
2015/03/27 职场文书
消费者投诉书范文
2015/07/02 职场文书
停车场管理制度范本
2015/08/05 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
责任书格式
2019/04/18 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers