概述
BatchNorm是2015年由Sergey Ioffe和Christian Szegedy在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出的,目的是加快深度神经网络的训练速度,提高训练精度
1 提出背景
- 深度神经网络学习很慢,原因之一是每层输入的分布都会改变,导致参数难以较快收敛
- 应对参数难以收敛的问题,还需仔细设计模型参数初始化,并采用较小的学习率,使得训练过程更长
- 上述现象称为internal covariate shift(ICS),解决办法就是增加归一化层(BatchNorm)进行处理
- BatchNorm是面向训练小批次数据,可以使用较大学习率
- BatchNorm类似于一种正则化方法,在某些场景下可以替代Dropout
2 操作流程
- 对每层输入进行归一化:转化为服从N(0,1)的正态分布数据,公式为:x’=(x-u)/σ,其中u和σ是根据输入x计算得到的均值和标准差,归一化可以加速训练过程,但也改变数据分布特征
- 对归一化数据进行缩放和平移:采用参数β和γ进行转化,公式为y=γx’+β,在特殊情况下,β和γ与u和σ取值相同时,则BatchNorm操作不改变原始数据分布
3 算法流程
这里给出论文中算法伪代码,包括归一化参数u和σ的计算过程,输入数据x的归一化过程,输入数据的缩放和平移过程。以卷积神经网络为例,BatchNorm在网络中的位置是卷积层之后,激励函数ReLU作用之前。
4 PyTorch中使用方式
- 调用方法:在torch.nn模块中,即torch.nn.BatchNorm2d§,p是数据维度
- 使用位置:在构建隐层的函数nn.Sequential()的参数中
- 训练时使用,测试时要固定参数,即测试前使用model.eval()
最后
以上就是兴奋电源为你收集整理的【PyTorch】BatchNorm方法原理和使用的全部内容,希望文章能够帮你解决【PyTorch】BatchNorm方法原理和使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复