running_mean和running_var
最近在看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相关推荐
- pytorch 批量归一化BatchNorm1d和BatchNorm2d的用法、BN层参数 running_mean running_var变量计算 验证
前提知识 BN层包括mean var gamma beta四个参数,.对于图像来说(4,3,2,2),一组特征图,一个通道的特征图对应一组参数,即四个参数均为维度为通道数的一维向量,图中gamma.b ...
- 详解Batch Normalization及其反向传播
↑ 点击蓝字 关注视学算法 作者丨风行天上@知乎 来源丨https://zhuanlan.zhihu.com/p/45614576 极市导读 本文介绍了Batch Normalization的过程及其 ...
- 在“内卷”、“红海”的2020 年,开垦计算机视觉领域的知识荒原:BatchNorm
作者丨纵横@知乎 来源丨https://zhuanlan.zhihu.com/p/166101119 2020 年已经要迎来了第二学期,内卷.红海.赛马似乎仍是 CV 领域的主旋律.不考虑 ddl 的 ...
- AI部署:聊一聊深度学习中的模型权重
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨Oldpan 来源丨Oldpan博客 编辑丨极市平台 导读 本文简要介绍了模型权重的统计方法,以 ...
- Lesson 14.3 Batch Normalization综合调参实战
Lesson 14.3 Batch Normalization综合调参实战 根据Lesson 14.2最后一部分实验结果不难看出,带BN层的模型并不一定比不带BN层模型效果好,要充分发挥BN层的效 ...
- 深度学习中,Batch_Normalization加速收敛并提高正确率的内部机制
文章转自https://blog.csdn.net/whitesilence/article/details/75667002, 初非常感谢作者的原创,转载一下方便自己以后的学习 在看 ladder ...
- Batch Normalization深入理解
Batch Normalization深入理解 1. BN的提出背景是什么? 统计学习中的一个很重要的假设就是输入的分布是相对稳定的.如果这个假设不满足,则模型的收敛会很慢,甚至无法收敛.所以,对于一 ...
- 【theano-windows】学习笔记十一——theano中与神经网络相关函数
前言 经过softmax和MLP的学习, 我们发现thenao.tensor中除了之前的博客[theano-windows]学习笔记五--theano中张量部分函数提到的张量的定义和基本运算外, 还有 ...
- Pytorch的BatchNorm层使用中容易出现的问题
前言 本文主要介绍在pytorch中的Batch Normalization的使用以及在其中容易出现的各种小问题,本来此文应该归属于[1]中的,但是考虑到此文的篇幅可能会比较大,因此独立成篇,希望能够 ...
- PyTorch框架学习十八——Layer Normalization、Instance Normalization、Group Normalization
PyTorch框架学习十八--Layer Normalization.Instance Normalization.Group Normalization 一.为什么要标准化? 二.BN.LN.IN. ...
最新文章
- DL练习1:基于boston_house_prices的BP神经网络
- centos改动sshport
- DVRRDK, EZSDK和DVSDK这三者有什么区别
- .Oracle管理及常用基础脚本
- Linux配置最基础的命令
- Java数据库篇5——事务
- Byval 和 ByRef 使用
- 【月报】Java知音的一月汇总
- 问题 D: 编写函数:比较字符串 之二 (Append Code)
- ×××病毒分析工具集之File Format Identifier v1.0
- 关于工厂的应用——中国工人和美国工人的问题
- 金融量化之华泰多因子估值类显著性和IC值计算
- 非线性控制1.0——自适应控制和鲁棒控制
- 曲苑杂坛--数据库更新探秘
- 设计模式七大原则——单一职责原则
- php faker,laravel使用Faker数据填充的实现方法
- 启动Selenium报错:session not created……解决方案
- Java抽象类(abstract)
- 生日快乐,我想念你们
- Java 下载 Excel文件打不开