Pytorch(笔记5) -- BatchNorm

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

         Pytorch(笔记5) -- BatchNorm_第1张图片

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

Pytorch(笔记5) -- BatchNorm_第2张图片

     目前已知的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进行搭配使用,组成一个块。使用实例如下

   Pytorch(笔记5) -- BatchNorm_第3张图片

 layer中包含梯度信息,如下

   

标准训练流程如下:

       Pytorch(笔记5) -- BatchNorm_第4张图片

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

layer.eval()

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

你可能感兴趣的:(Pytorch(笔记5) -- BatchNorm)