【问题标题】:What is being normalized by Keras/TensorFlow BatchNormalizationKeras/TensorFlow BatchNormalization 正在规范化什么
【发布时间】:2018-04-29 00:05:10
【问题描述】:

我的问题是 BatchNormalization (BN) 对什么进行标准化。

我在问,BN 是分别对每个像素的通道进行归一化,还是对所有像素一起归一化。它是在每张图像的基础上还是在整个批次的所有通道上进行。

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

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

对于m 中的每个image=X

  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中的下一张图片重复此过程,

在 keras 中,BatchNormalization 的文档说:

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

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

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

【问题讨论】:

  • BN 主要是这样工作的。我不明白这个问题。
  • 我在问,BN 是分别对每个像素的通道进行归一化,还是对所有像素一起归一化。它是在每张图像的基础上还是在整个批次的所有通道上进行的。
  • 对于每个像素,在批次中进行标准化,因此每个批次中每个像素的均值和标准差分别为 0 和 1。

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


【解决方案1】:

首先,有几种方法可以应用批量归一化,甚至在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 通道,计算该通道中所有像素和所有图像的均值/方差并应用归一化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 2017-06-08
    • 2021-08-30
    • 2020-12-13
    • 2018-10-14
    • 2017-07-25
    相关资源
    最近更新 更多