在阅读源码的过程中,BN代码部分出现了一些之前没见过的参数,在这里总结一下(用小写字母代表,具体出现在各个程序的源码中可能有区别,但是大致应该相同)。

  • epsilon:防止normalization过程中分母出现为0的情况,一般设置为很小的值(例如1e-5),如下是batch norm的算法描述过程,在算法第四步中分母部分出现了epsilon

  • momentum:batch norm需要计算加权移动平均数(EMA),momentum就是移动平均值的权重,如下是代码例子,在代码的21行和22行就是momentum(权重)的使用。

def Batchnorm_simple_for_train(x, gamma, beta, bn_param):
"""
param:x    : 输入数据,设shape(B,L)
param:gama : 缩放因子  γ
param:beta : 平移因子  β
param:bn_param   : batchnorm所需要的一些参数eps      : 接近0的数,防止分母出现0momentum : 动量参数,一般为0.9, 0.99, 0.999running_mean :滑动平均的方式计算新的均值,训练时计算,为测试数据做准备running_var  : 滑动平均的方式计算新的方差,训练时计算,为测试数据做准备
"""running_mean = bn_param['running_mean']  #shape = [B]running_var = bn_param['running_var']    #shape = [B]results = 0. # 建立一个新的变量x_mean=x.mean(axis=0)  # 计算x的均值x_var=x.var(axis=0)    # 计算方差x_normalized=(x-x_mean)/np.sqrt(x_var+eps)       # 归一化results = gamma * x_normalized + beta            # 缩放平移running_mean = momentum * running_mean + (1 - momentum) * x_meanrunning_var = momentum * running_var + (1 - momentum) * x_var#记录新的值bn_param['running_mean'] = running_meanbn_param['running_var'] = running_var return results , bn_param
  • use_precise_stats:在使用batch norm的时候,训练的时候有batch的概念,但是测试的时候并没有batch,所以在测试的时候需要找到一个适当的值来进行normalization,这个值就是EMA(上述的滑动平均数),但是EMA仅仅是一个估计值,当训练的时候计算的EMA不能很好的估计到测试的时候的均值和方差的时候(EMA的计算方式有问题或者batch和model不稳定),batch norm就会失效。

    在EMA的计算过程中,如果lamda过小,那么最近的均值对EMA贡献过大,就会产生很大的偏差,如果lamda过大,那么需要大量的迭代才能得到结果(通常的lamda取值范围是0.9~0.99)

    将模型固定住,取一定数量的batch,计算真正的均值和方差(不是EMA),这就是precise batch norm,batch的数量也是一个超参数。

    注意precise batch norm不是一个主流的方法,因为EMA通常是有效的(lamda足够大,模型会迭代训练很多轮,选取的模型在经过一定的迭代后会稳定下来)。

  • num_batches_precise:在precise batchnorm中计算平均数使用的batch数量。

参考:
https://blog.csdn.net/shuzfan/article/details/50723877
https://blog.csdn.net/qq_25737169/article/details/79048516
https://www.bilibili.com/video/av60805995

batch norm参数相关推荐

  1. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架(作业:TensorFlow教程+数字手势预测)

    文章目录 1. 探索TensorFlow库 1.1 线性函数 1.2 计算 sigmoid 1.3 计算损失函数 1.4 One_Hot 编码 1.5 用0,1初始化 2. 用TensorFlow建立 ...

  2. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架

    文章目录 1. 调试处理 2. 为超参数选择合适的范围 3. 超参数调试的实践 4. 归一化网络的激活函数 5. 将 Batch Norm 拟合进神经网络 6. Batch Norm 为什么奏效 7. ...

  3. dropout,batch norm 区别 顺序

    20210614 https://www.cnblogs.com/hutao722/p/9946047.html 深度学习基础系列(九)| Dropout VS Batch Normalization ...

  4. 吴恩达深度学习(53)-Batch Norm 为什么奏效?

    https://www.toutiao.com/a6640433472697532942/ 2019-01-04 07:35:33 Batch Norm 为什么奏效?(Why does Batch N ...

  5. Batch Norm、Layer Norm、Instance Norm、Group Norm、Switchable Norm总结

    转自https://blog.csdn.net/qq_41997920/article/details/89945972 目录 1.综述 1. BN 2. LN 3. IN 4. GN 5. SN 2 ...

  6. 2.3.2 Batch Norm介绍

    正则化网络的激活函数 Batch归一化会使你的参数搜索变得很容易,使神经网络对超参数选择变得更加稳定.超参数范围会更庞大,工作效率也会更好.也会让你训练出更为深层次的神经网络.下面我们具体介绍一下Ba ...

  7. 40_pytorch Batch Norm

    1.37.Batch Normalization,批规范化 1.37.1.Batch Norm介绍 1.37.2.Intuitive explanation 1.37.3.Intuitive expl ...

  8. 机器学习、深度学习实战细节(batch norm、relu、dropout 等的相对顺序)

    cost function,一般得到的是一个 scalar-value,标量值: 执行 SGD 时,是最终的 cost function 获得的 scalar-value,关于模型的参数得到的: 1. ...

  9. 详解常用的Batch Norm、Group Norm,Layer norm、Instance Norm

    本文主要分析cv中常用的batch norm, group norm方法,由于目标检测中不常见,因此只是简单介绍并理解Layer norm和Instance Norm的概念.首先cv中用的最多的肯定是 ...

  10. Batch Norm

    Batch Norm source from: Deep Learning Specialization 效果 normalize inputs to speed up learning mean/v ...

最新文章

  1. Jenkins Pipeline 构建复杂的Electron程序
  2. C++中最好不要在构造函数和析构函数中调用虚函数
  3. Windows驱动开发技术详解笔记
  4. 学习笔记(45):Python实战编程-键盘事件
  5. 番茄花园win11 32位官方原版镜像文件v2021.07
  6. vimrc.local 备份
  7. java经典笔试题目_java笔试考题(经典).pdf
  8. android 手机 与 python服务器_python服务器与android客户端socket通信实例
  9. linux操作系统中的netstat命令查看端口状态的使用和window操作系统查看端口号
  10. WebService 代码创建E9流程
  11. Cesium 之实现房屋模型拆解
  12. Python 字符串去除空格的方法
  13. matlab数学实验二重积分的计算,matlab计算二重积分
  14. 网站添加错误页面提示功能(404、500错误提示)
  15. 软件设计师冲刺:临考快速记忆
  16. CT图像分割dicom文件与nii.gz文件预处理----窗宽(window width)和窗位(window level)的设置
  17. 2014苹果全球开发者大会:新系统成主角 无硬件发布
  18. 游戏百科选择题小测试,就算你是游戏大神也不一定全做对
  19. 如何预置Android 手机 APK
  20. 无线模块在分布式数据采集中的应用

热门文章

  1. PHP实现完全二叉树
  2. IDEA插件jrebel的配置使用
  3. 被裁的第50天,我终于拿到心仪公司Offer
  4. 刚刚,爱奇艺发布重磅开源项目!
  5. 我关于读书的一点小体会
  6. mysql悲观锁隔离级别_mysql隔离级别与悲观锁、乐观锁
  7. redistemplate 设置永不过期_解决密码已过期,拒绝访问问题
  8. html单元格选中状态,UITableViewCell 设置单元格选中后只显示一个打勾的状态
  9. velocity自定义函数_mysql建立自定义函数的问题
  10. 力扣题目系列:1370. 上升下降字符串(Python题解)