我是靠谱客的博主 兴奋电源,最近开发中收集的这篇文章主要介绍【PyTorch】BatchNorm方法原理和使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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方法原理和使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部