3

我的问题是 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

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

在 keras 中,BatchNormalization 的文档说:

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

例如,在带有 的Conv2D图层之后data_format="channels_first",设置axis=1BatchNormalization

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

4

1 回答 1

0

首先,有几种方法可以应用批量归一化,甚至在原始论文中专门针对卷积神经网络提到了这些方法。请参阅此问题中的讨论,其中概述了普通BN和卷积BN之间的区别,以及这两种方法都有意义的原因。

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

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

于 2017-12-06T15:47:58.953 回答