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

我要问的是,BN是将每个像素的通道标准化还是对所有像素的通道标准化。并在每个图像或整个批次的所有通道上执行该操作。

具体地说,BN在X上运行。说,X.shape = [m,h,w,c]。因此,对于axis=3,它在“ c”维度上运行,该维度是通道数(用于rgb)或特征图的数量。

因此,可以说X是一个rgb,因此具有3个通道。 BN是否执行以下操作:(这是BN的简化版本,用于讨论尺寸方面。我知道可以学习gamma和beta,但此处不关心。)

对于image=X中的每个m


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


在keras中,BatchNormalization的文档说:


  axis:整数,应归一化的轴(通常是要素轴)。
  
  例如,在带有Conv2Ddata_format="channels_first"层之后,
  在axis=1中设置BatchNormalization


但是它在每个维度上到底在做什么?

最佳答案

首先,有几种应用批处理规范化的方法,甚至在original paper中特别提到了卷积神经网络。参见this question中的讨论,其中概述了普通BN和卷积BN之间的区别,以及这两种方法有意义的原因。

特别地,keras.layers.BatchNormalization实现卷积BN,这意味着对于输入[m,h,w,c],它计算c均值和跨m*h*w值的标准差。运行均值,运行std dev以及gamma和beta变量的形状仅为(c,)。跨空间尺寸(像素)以及批次中的值是共享的。

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

关于machine-learning - Keras/TensorFlow BatchNormalization正在规范什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47312922/

10-12 23:59