最近在看yolov4的pytorch源码,下面的这段代码,有些疑问,涉及到了running_mean和running_var

def load_conv_bn(buf, start, conv_model, bn_model):num_w = conv_model.weight.numel()num_b = bn_model.bias.numel()bn_model.bias.data.copy_(torch.from_numpy(buf[start:start + num_b]));start = start + num_bbn_model.weight.data.copy_(torch.from_numpy(buf[start:start + num_b]));start = start + num_bbn_model.running_mean.copy_(torch.from_numpy(buf[start:start + num_b]));start = start + num_bbn_model.running_var.copy_(torch.from_numpy(buf[start:start + num_b]));start = start + num_bconv_model.weight.data.copy_(torch.from_numpy(buf[start:start + num_w]).reshape(conv_model.weight.data.shape));start = start + num_wreturn start
  • pytorch在打印网络参数的时候,只打出weight和bias这两个参数。但是,BN层应该是有四个参数,因为pytorch中只有可学习的参数才称为parameter,而running_mean和running_var则是在前向时先由X计算出mean和var,再由mean和var以动量momentum来更新running_mean和running_var。
  • BN层中还会保存更新动量momentum和防止数值计算错误的eps
  • 在训练阶段,running_mean和running_var在每次前向时更新一次;在测试阶段,则通过net.eval()固定该BN层的running_mean和running_var,此时这两个值即为训练阶段最后一次前向时确定的值,并在整个测试阶段保持不变。
def batch_norm(self, x):""":param x: 数据:return: BN输出"""x_mean = x.mean(axis=0)x_var = x.var(axis=0)# 对应running_mean的更新公式# running_mean = (1 - momentum) * mean_old + momentum * mean_new# running_var = (1 - momentum) * var_old + momentum * var_newself._running_mean = (1-self._momentum)*self._running_mean + self._momentum*x_meanself._running_var = (1-self._momentum)*self._running_var + self._momentum*x_var# 对应论文中计算BN的公式x_hat = (x-x_mean)/np.sqrt(x_var+self._eps)y = self._gamma*x_hat + self._betareturn y

之前在Batch Normalization有一些关于BN的理解,可以结合看。

running_mean和running_var相关推荐

  1. pytorch 批量归一化BatchNorm1d和BatchNorm2d的用法、BN层参数 running_mean running_var变量计算 验证

    前提知识 BN层包括mean var gamma beta四个参数,.对于图像来说(4,3,2,2),一组特征图,一个通道的特征图对应一组参数,即四个参数均为维度为通道数的一维向量,图中gamma.b ...

  2. 详解Batch Normalization及其反向传播

    ↑ 点击蓝字 关注视学算法 作者丨风行天上@知乎 来源丨https://zhuanlan.zhihu.com/p/45614576 极市导读 本文介绍了Batch Normalization的过程及其 ...

  3. 在“内卷”、“红海”的2020 年,开垦计算机视觉领域的知识荒原:BatchNorm

    作者丨纵横@知乎 来源丨https://zhuanlan.zhihu.com/p/166101119 2020 年已经要迎来了第二学期,内卷.红海.赛马似乎仍是 CV 领域的主旋律.不考虑 ddl 的 ...

  4. AI部署:聊一聊深度学习中的模型权重

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Oldpan 来源丨Oldpan博客 编辑丨极市平台 导读 本文简要介绍了模型权重的统计方法,以 ...

  5. Lesson 14.3 Batch Normalization综合调参实战

    Lesson 14.3 Batch Normalization综合调参实战   根据Lesson 14.2最后一部分实验结果不难看出,带BN层的模型并不一定比不带BN层模型效果好,要充分发挥BN层的效 ...

  6. 深度学习中,Batch_Normalization加速收敛并提高正确率的内部机制

    文章转自https://blog.csdn.net/whitesilence/article/details/75667002, 初非常感谢作者的原创,转载一下方便自己以后的学习 在看 ladder ...

  7. Batch Normalization深入理解

    Batch Normalization深入理解 1. BN的提出背景是什么? 统计学习中的一个很重要的假设就是输入的分布是相对稳定的.如果这个假设不满足,则模型的收敛会很慢,甚至无法收敛.所以,对于一 ...

  8. 【theano-windows】学习笔记十一——theano中与神经网络相关函数

    前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客[theano-windows]学习笔记五--theano中张量部分函数提到的张量的定义和基本运算外, 还有 ...

  9. Pytorch的BatchNorm层使用中容易出现的问题

    前言 本文主要介绍在pytorch中的Batch Normalization的使用以及在其中容易出现的各种小问题,本来此文应该归属于[1]中的,但是考虑到此文的篇幅可能会比较大,因此独立成篇,希望能够 ...

  10. PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization

    PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...

最新文章

  1. DL练习1:基于boston_house_prices的BP神经网络
  2. centos改动sshport
  3. DVRRDK, EZSDK和DVSDK这三者有什么区别
  4. .Oracle管理及常用基础脚本
  5. Linux配置最基础的命令
  6. Java数据库篇5——事务
  7. Byval 和 ByRef 使用
  8. 【月报】Java知音的一月汇总
  9. 问题 D: 编写函数:比较字符串 之二 (Append Code)
  10. ×××病毒分析工具集之File Format Identifier v1.0
  11. 关于工厂的应用——中国工人和美国工人的问题
  12. 金融量化之华泰多因子估值类显著性和IC值计算
  13. 非线性控制1.0——自适应控制和鲁棒控制
  14. 曲苑杂坛--数据库更新探秘
  15. 设计模式七大原则——单一职责原则
  16. php faker,laravel使用Faker数据填充的实现方法
  17. 启动Selenium报错:session not created……解决方案
  18. Java抽象类(abstract)
  19. 生日快乐,我想念你们
  20. Java 下载 Excel文件打不开

热门文章

  1. 萝卜青菜各有所爱------console系列详解
  2. Win10中Ubuntu优化配置
  3. 读书笔记 - 机器学习实战 - 4 利用概率理论进行分类:朴素贝叶斯
  4. 关于ABA问题(隔壁老王问题)
  5. 【字符编码转换】使用iconv
  6. pygame之display模块
  7. Permission is only granted to system apps解决方法
  8. Android自学笔记:Tab控件源码剖析
  9. Siki学院换装项目的MVC实现
  10. wii模拟器linux版,Dolphin模拟器_Dolphin模拟器最新版下载[Wii模拟器]-下载之家