pytorch归一化问题

Normalization问题

  • 常用归一化层

    将输入的图像shape记为[N,C,H,W],下面将介绍几种归一化层
    Batch Normalization:在batch上,对NHW做归一化
    Layer Normalization:在通道上,对CHW做归一化
    Instance Normalization:在图像像素上,对HW做归一化
    Group Normalization:将channel分组,然后在做归一化
    Switchable Normalization:将BL,LN,IN结合,赋予权重,让网络子集去学习归一化曾应该使用什么方法

  • BatchNorm1d

    torch.nn.BatchNorm1d(num_features,eps=1e-05,momentum=0.1,affine=True)
    对二维或三维数据进行批归一化,相当于一个小批量的一维数据

    num_features:C from an expected input of size (N,C,L) or L from input of size(N,L)

  • BatchNorm2d

    batchNorm是在batch上,对NHW做归一化:即是将同一个batch中的所有样本的同一层特征图抽出来一起求mean和variance。加快收敛速度,允许网络使用更高的学习效率。可作为一个正则化器,较少对dropout的需求

    torch.nn.BatchNormal2d(num_features,eps=1e-05,momentum=0.1,affine=True)
    y = x − E ( x ) V a r ( x ) + ϵ ∗ γ + β y=\frac{x-E(x)}{\sqrt{Var(x)+\epsilon}}*\gamma+\beta y=Var(x)+ϵ xE(x)γ+β
    其主计算过程:沿着通道计算每一batch的均值 μ \mu μ;沿着通道计算每个batch的方差 δ 2 \delta^2 δ2,对x做归一化;放入缩放和平移计算

    在一个小批量数据中,计算每个通道所有数据的均值与方差
    num_features:通道数
    momentum:动态均值和动态方差所使用的动量

      import numpy as np
      x = np.random.randn(1,2,3,4)
      x_mean = np.mean(x,axis=(0,2,3),keepdims=True)
      x_var = np.var(x,axis=(0,2,3),keepdims=True)
      x_normalized = (x-x_mean)/np.sqrt(x_var)
    
  • BatchNorm3d

    torch.nn.BatchNorm3d(num_features,eps=1e-05,momentum=0.1,affine=True)
    应用于五维数据
    num_features:C from an expected input of size(N,C,D,H,W)

  • LayerNorm

    LayerNorm在通道方向上,对CHW归一化;即是将batch中的单个样本的每一层特征抽取出来起一个mean和bariance,与batch size无关,不同通道有者相同的均值与方差。与batch_size无关

    torch.nn.LayerNorm(normalized_shape,eps=1e-5,elementwise_affine=True)
    normalize_shape:input shape from an expected input of size
    [ ∗ , n o r m a l i z e _ s h a p e [ 0 ] , n o r m a l i z e _ s h a p e [ 1 ] , . . . n o r m a l i z e _ s h a p e [ − 1 ] ] \big[ * ,normalize\_shape[0],normalize\_shape[1],...normalize\_shape[-1]\big] [,normalize_shape[0],normalize_shape[1],...normalize_shape[1]]

      x_mean = np.mean(x,axis=(1,2,3),keepdims=True)
      x_var = np.var(x,axis=(1,2,3),keepdims=True)
      x_normalized = (x-x_mean)/np.sqrt(x_var)
    
  • GroupNorm

    将batch中的单个样本的G层特征图出出来一起求mean和bariance,与batch_size无关

  • InstanceNorm

    将batch中的单个样本的同一层特征抽取出来求mean和bariance,与batch_size无关

      x_mean = np.mean(x,axis=(2,3),keepdims=True)
      x_var = np.var(x,axis=(2,3),keepdims=True)
      x_normalized = (x-x_mean)/np.sqrt(x_var)
    
  • weightNorm

    此处不详解,需要时查询即可

你可能感兴趣的:(pytorch归一化问题)