浅谈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脚本实现统计日志文件中的ip访问次数代码分享
Aug 06 Python
python处理csv数据的方法
Mar 11 Python
python根据出生日期返回年龄的方法
Mar 26 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
python matlibplot绘制3D图形
Jul 02 Python
Python matplotlib可视化实例解析
Jun 01 Python
TensorFlow-gpu和opencv安装详细教程
Jun 30 Python
python设置中文界面实例方法
Oct 27 Python
用python发送微信消息
Dec 21 Python
python中time tzset()函数实例用法
Feb 18 Python
Python获取江苏疫情实时数据及爬虫分析
Aug 02 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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中file_get_contents高?用法实例
2014/09/24 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
提取字符串中年月日的函数代码
2013/11/05 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
JavaScript中利用for循环遍历数组
2017/01/15 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
深入理解与使用keep-alive(配合router-view缓存整个路由页面)
2018/09/25 Javascript
Python标准库inspect的具体使用方法
2017/12/06 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python读取中文txt文本的方法
2018/04/12 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
对python使用telnet实现弱密码登录的方法详解
2019/01/26 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
Python3.6 + TensorFlow 安装配置图文教程(Windows 64 bit)
2020/02/24 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
2020/04/29 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
python 如何上传包到pypi
2020/12/24 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
JAVA和C++区别都有哪些
2015/03/30 面试题
后勤自我鉴定
2013/10/13 职场文书
银行职员思想汇报
2013/12/31 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
中国文明网签名寄语
2014/01/18 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
2014年优秀党员材料
2014/12/18 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书
javascript代码简写的几种常用方式汇总
2021/08/23 Javascript