我的问题是BatchNormalization (BN)是如何标准化的。
我要问的是,BN是否分别对每个像素的通道进行规范化,还是将所有像素合并在一起。它是在每个图像的基础上,还是在整个批处理的所有通道上进行的。
具体来说,BN是在X
上运营的。比如说,X.shape = [m,h,w,c]
。因此,对于axis=3
,它是在"c“维度上操作的,即通道数(对于rgb)或功能映射数。
因此,假设X
是一个rgb,因此有3个通道。BN是否做了以下工作:(这是BN的简化版本,用于讨论维度方面。我知道伽马和贝塔是学习的,但这里并不关心。)
对于m
中的每个m
r = (r-mean)/var
,g = (g-mean)/var
,& b = (b-mean)/var
,其中r,g,&b分别是X
的红、绿、蓝通道。m
中的下一个图像重复此过程,在keras中,BatchNormalization的文档说:
轴:整数,应该标准化的轴(通常是特征轴)。 例如,在
Conv2D
层使用data_format="channels_first"
之后,在BatchNormalization
中设置axis=1
。
但是它在每个维度到底在做什么呢?
发布于 2017-12-06 15:47:58
首先,有几种方法可以应用于批量归一化,甚至在原纸中有专门针对卷积神经网络的方法。参见这个问题中的讨论,其中概述了通常的BN和卷积BN之间的区别,以及这两种方法之所以有意义的原因。
特别是keras.layers.BatchNormalization
实现了卷积BN,这意味着对于输入[m,h,w,c]
,它计算跨m*h*w
值的c
均值和标准差。运行均值、运行std、伽马和贝塔变量的形状只是(c,)
。空间维度(像素)以及批处理的值都是共享的。
因此,一个更精确的算法是:对于每个R、G和B通道,计算该通道中所有像素和所有图像的均值/方差,并应用归一化。
https://stackoverflow.com/questions/47312922
复制相似问题