什么是Keras / TensorFlow BatchNormalization正常化

时间:2017-11-15 16:45:29

标签: machine-learning tensorflow keras conv-neural-network batch-normalization

我的问题是BatchNormalization(BN)正在规范什么。

我在问,BN是将每个像素的通道单独归一化还是将所有像素归一化。它是基于每个图像还是整个批次的所有通道进行的。

具体而言,BN正在X上运作。说,X.shape = [m,h,w,c]。因此,对于axis=3,它正在" c"维度,即通道数(对于rgb)或要素图的数量。

所以我要说X是一个rgb,因此有3个频道。 BN是否会做以下事情:(这是BN的简化版本,用于讨论维度方面。我知道伽玛和beta都是学习的,但在这里并不关心。)

对于image=X中的每个m

  1. 对于每个像素(h,w)取相关r,g和&的平均值。 b值。
  2. 对于每个像素(h,w),取相关r,g和&的方差。 b值
  3. 执行r = (r-mean)/varg = (g-mean)/var和& b = (b-mean)/var,其中r,g和& b是红色,绿色和&蓝色通道分别为X
  4. 然后对m
  5. 中的下一张图片重复此过程

    在keras中,BatchNormalization的文档说:

      

    axis:整数,应该归一化的轴(通常是特征轴)。

         

    例如,在使用Conv2D的{​​{1}}图层之后,   在data_format="channels_first"中设置axis=1

    但它在每个维度上究竟做了什么?

1 个答案:

答案 0 :(得分:0)

首先,有几种方法可以应用批量标准化,甚至在original paper中专门针对卷积神经网络提到。请参阅this question中的讨论,其中概述了常规卷积 BN之间的区别,以及两种方法理解的原因。

特别是keras.layers.BatchNormalization实现了卷积 BN,这意味着对于输入[m,h,w,c],它计算c意味着和m*h*w值之间的标准偏差。运行平均值,运行std dev和gamma和beta变量的形状只是(c,)。空间维度(像素)以及批处理中的值共享

因此,更准确的算法是:对于每个R,G和B通道,计算所有像素和该通道中所有图像的均值/方差,并应用标准化。