Pytorch(笔记5) -- BatchNorm

博客介绍了在CNN训练中引入BatchNorm操作的重要性,它可避免梯度下降不平衡,使训练稳定收敛。还列举了4种Normalization方法,重点介绍了Batch Norm的计算方式,区分了其与图片增强中Normalization操作的不同,以及在标准训练流程中的使用要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在上一节中,我们知道使用sigmoid会出现梯度消失的情况,在实际训练中,引入了BatchNorm操作,可以将输入值限定在(\gamma ,\beta )之间,

         

      如下图,如果不进行Batch Norm,如果输入weight差别过大,在两个方向进行梯度下降,会出现梯度下降不平衡,在训练过程中不能稳定的收敛,在实际应用过程中也不能稳定的输出label结果,因此Normalization是很重要的

图片来自李宏毅老师PPT

     目前已知的Normalization的方法有4种,对于输入数据为[N,C,(H*W)](N代表tensor数量,C代表通道,H代表高,W代表宽)

,其中第一种最为常见

  • Batch Norm:对每一个批次(N个tensor)的每个通道分别计算均值mean和方差var,如[10,4,9] 最终输出是[0,1,2,3]这样的1*4的tensor
  • Layer Norm:对于每一个tensor的所有channels进行均值和方差计算
  • Instance Norm:对于每个tensor的每个channels分别计算
  • Group Norm:引用了group的概念,比如BGR表示一个组 --不常见

Batch Norm

  首先注意区分BatchNorm和图片增强中的Normalization 操作,Image Norm 是对输入图片的1通道或者3通道进行Norm运算,输入图片转变为tensor后每个通道每个值-均值/方差 ,可以有效的将数据限制在我们需要的区间内,Batch Norm 是一个layer的操作通常是Conv2d,Maxpool2d,ReLU,和Batch Norm进行搭配使用,组成一个块。使用实例如下

   

 layer中包含梯度信息,如下

   

标准训练流程如下:

       

   其中,均值和方差是包含经过训练的所有的批次的结果,如果,在训练过程中,应该将layer设置为test格式,不进行梯度更新,使用的是全局的均值和方差。

layer.eval()

     坚持一件事或许很难,但坚持下来一定很酷!^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值