我的问题是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)/var
,g = (g-mean)/var
和b = (b-mean)/var
,其中r,g和b分别是X
的红色,绿色和蓝色通道。
然后对m
中的下一张图像重复此过程,
在keras中,BatchNormalization的文档说:
axis:整数,应归一化的轴(通常是要素轴)。
例如,在带有Conv2D
的data_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/