目录

说明

BatchNorm1d参数

num_features

eps

momentum

affine

track_running_stats

BatchNorm1d训练时前向传播

BatchNorm1d评估时前向传播

总结


说明

网络训练时和网络评估时,BatchNorm模块的计算方式不同。如果一个网络里包含了BatchNorm,则在训练时需要先调用train(),使网络里的BatchNorm模块的training=True(默认是True),在网络评估时,需要先调用eval(),使网络里的BatchNorm模块的training=False。

BatchNorm1d参数

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

num_features

输入维度是(N, C, L)时,num_features应该取C;这里N是batch size,C是数据的channel,L是数据长度。

输入维度是(N, L)时,num_features应该取L;这里N是batch size,L是数据长度,这时可以认为每条数据只有一个channel,省略了C

eps

对输入数据进行归一化时加在分母上,防止除零,详情见下文。

momentum

更新全局均值running_mean和方差running_var时使用该值进行平滑,详情见下文。

affine

设为True时,BatchNorm层才会学习参数,否则不包含这两个变量,变量名是weightbias,详情见下文。

track_running_stats

设为True时,BatchNorm层会统计全局均值running_mean和方差running_var,详情见下文。

BatchNorm1d训练时前向传播

  1. 首先对输入batch求,并用这两个结果把batch归一化,使其均值为0,方差为1。归一化公式用到了eps(),即。如下输入内容,shape是(3, 4),即batch_size=3,此时num_features需要传入4。

    tensor = torch.FloatTensor([[1, 2, 4, 1],[6, 3, 2, 4],[2, 4, 6, 1]])

    此时(无偏样本方差)和(有偏样本方差),有偏和无偏的区别在于无偏的分母是N-1,有偏的分母是N。注意在BatchNorm中,用于更新running_var时,使用无偏样本方差即,但是在对batch进行归一化时,使用有偏样本方差,因此如果batch_size=1,会报错。归一化后的内容如下。

    [[-0.9258, -1.2247,  0.0000, -0.7071],[ 1.3887,  0.0000, -1.2247,  1.4142],[-0.4629,  1.2247,  1.2247, -0.7071]]
  2. 如果track_running_stats==True,则使用momentum更新模块内部的running_mean(初值是[0., 0., 0., 0.])和running_var(初值是[1., 1., 1., 1.]),更新公式是,其中代表更新后的running_meanrunning_var表示更新前的running_meanrunning_var表示当前batch的均值和无偏样本方差。
  3. 如果track_running_stats==False,则BatchNorm中不含有running_meanrunning_var两个变量。
  4. 如果affine==True,则对归一化后的batch进行仿射变换,即乘以模块内部的weight(初值是[1., 1., 1., 1.])然后加上模块内部的bias(初值是[0., 0., 0., 0.]),这两个变量会在反向传播时得到更新。
  5. 如果affine==False,则BatchNorm中不含有weightbias两个变量,什么都都不做。

BatchNorm1d评估时前向传播

  1. 如果track_running_stats==True,则对batch进行归一化,公式为,注意这里的均值和方差是running_meanrunning_var,在网络训练时统计出来的全局均值和无偏样本方差。
  2. 如果track_running_stats==False,则对batch进行归一化,公式为,注意这里的均值和方差是batch自己的mean和var,此时BatchNorm里不含有running_meanrunning_var。注意此时使用的是无偏样本方差(和训练时不同),因此如果batch_size=1,会使分母为0,就报错了。
  3. 如果affine==True,则对归一化后的batch进行放射变换,即乘以模块内部的weight然后加上模块内部的bias,这两个变量都是网络训练时学习到的。
  4. 如果affine==False,则BatchNorm中不含有weightbias两个变量,什么都不做。

总结

在使用batchNorm时,通常只需要指定num_features就可以了。网络训练前调用train(),训练时BatchNorm模块会统计全局running_meanrunning_var,学习weightbias,即文献中的。网络评估前调用eval(),评估时,对传入的batch,使用统计的全局running_meanrunning_var对batch进行归一化,然后使用学习到的weightbias进行仿射变换。

pytorch BatchNorm参数详解,计算过程相关推荐

  1. pytorch MSELoss参数详解

    pytorch MSELoss参数详解 import torch import numpy as np loss_fn = torch.nn.MSELoss(reduce=False, size_av ...

  2. pytorch ctcloss 参数详解

    https://zhuanlan.zhihu.com/p/67415439 https://www.jianshu.com/p/812fce7de08d

  3. PyTorch实现AlexNet模型及参数详解

    文章目录 一.卷积池化层原理 二.全连接层原理 三.模型参数详解 注:AlexNet论文错误点 1.卷积池化层1 (1)卷积运算 (2)分组 (3)激活函数层 (4)池化层 (5)归一化处理 (6)参 ...

  4. 【Cartographer参数详解,调参,降低计算量调优笔记记录】

    Cartographer学习记录 文章目录 Cartographer学习记录 前言 一.cartographer参数详解 二..lua文件参数详解 1.rs16_2d_outdoor.lua 2.tr ...

  5. pytorch中DataLoader的num_workers参数详解与设置大小建议

    Q:在给Dataloader设置worker数量(num_worker)时,到底设置多少合适?这个worker到底怎么工作的? train_loader = torch.utils.data.Data ...

  6. MATLAB调用refprop计算物性参数详解

    MATLAB调用refprop计算物性参数详解 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 REFPROP(REference Fluid PROPerties)是一款国际权威工质 ...

  7. XGBRegressor参数详解以及调参过程

    XGBRegressor参数详解以及调参过程 一.参数 1.通用参数booster.nthread 2.学习目标参数 (1)objective (2)eval_metric (3)seed 3.Tre ...

  8. oracle安装过程中内核参数详解

    转载网址:https://www.cnblogs.com/colben/p/4120439.html 在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析. ...

  9. pytorch---之BN层参数详解及应用(1,2,3)(1,2)?

    BN层参数详解(1,2) 一般来说pytorch中的模型都是继承nn.Module类的,都有一个属性trainning指定是否是训练状态,训练状态与否将会影响到某些层的参数是否是固定的,比如BN层(对 ...

最新文章

  1. oracle sql MERGE 关键字
  2. 报告:采用人工智能并不意味着成功
  3. HDU3923-Invoker-polya n次二面体
  4. eclipse调试一个struts2例子时遇到的一些问题总结
  5. 一次内网靶场学习记录
  6. 利用反射球实现镜面效果
  7. initial model for Agile Development Organization: Relationship Graph
  8. java date转sql date_java.util.Date和java.sql.Date转换(转)
  9. 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)
  10. 我在项目中对 MySQL 做的优化
  11. Unity中 创建射线的两种方法
  12. 视频会议之BigBlueButton
  13. 贝尔宾团队角色理论及实践
  14. 家庭的和睦,人生的平淡
  15. ffmpeg实现flv至mp4格式转换的bat脚本
  16. 山东理工acm 3926 bLue的二叉树
  17. 在osgEarth中添加模型的简单示例
  18. win 10 把秘钥清掉之后查不到秘钥怎么办
  19. 怎么学习嵌入式技术开发
  20. 【C语言程序设计】实验 4

热门文章

  1. 小新Air15的USB接口只能充电,不能传送数据
  2. AndroidStudio上传自己的项目到Bintray jCenter远程仓库(解决400错误)
  3. Java题目集-Chapter 10 Object-Oriented Thinking
  4. 2018年互联网技术岗(数据分析)暑期实习面试经验
  5. 创业记[01]三人行,初创的激情
  6. 纪中 Day13Day14
  7. 硬件基础:MOS管工作区间及开通过程分析——以N沟道增强型MOS为例
  8. SpringEL 表达式语言(Spring Expression Language)
  9. Java 核心技术专题
  10. 数据清洗是清洗什么?