浅谈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实现自动登录人人网并采集信息的方法
Jun 28 Python
python使用正则表达式替换匹配成功的组
Nov 17 Python
Python字典操作详细介绍及字典内建方法分享
Jan 04 Python
python实现随机漫步算法
Aug 27 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
浅谈python常用程序算法
Mar 22 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
python用什么编辑器进行项目开发
Jun 17 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
Python通过len函数返回对象长度
Oct 22 Python
PyCharm2020.3.2安装超详细教程
Feb 08 Python
python字典进行运算原理及实例分享
Aug 02 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP 计算两个特别大的整数实例代码
2018/05/07 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
php fread函数使用方法总结
2019/05/28 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
js查看一个函数的执行时间实例代码
2015/09/12 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Python 调用DLL操作抄表机
2009/01/12 Python
python中对list去重的多种方法
2014/09/18 Python
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
国际商务系学生个人的自我评价
2013/11/26 职场文书
酒店司机岗位职责
2013/12/14 职场文书
部队学习十八大感言
2014/01/11 职场文书
2014年最新学习全国两会精神心得
2014/03/17 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
党的群众路线教育实践活动个人对照检查材料
2014/09/22 职场文书
财务审计整改报告
2014/11/06 职场文书
学校百日安全活动总结
2015/05/07 职场文书
工作收入证明模板
2015/06/12 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Python 中 Shutil 模块详情
2021/11/11 Python