【发布时间】:2016-06-04 00:45:58
【问题描述】:
我试图弄清楚 Keras 中的批处理规范化到底是做什么的。现在我有以下代码。
for i in range(8):
c = Convolution2D(128, 3, 3, border_mode = 'same', init = 'he_normal')(c)
c = LeakyReLU()(c)
c = Convolution2D(128, 3, 3, border_mode = 'same', init = 'he_normal')(c)
c = LeakyReLU()(c)
c = Convolution2D(128, 3, 3, border_mode = 'same', init = 'he_normal')(c)
c = LeakyReLU()(c)
c = merge([c, x], mode = 'sum')
c = BatchNormalization(mode = 1)(c)
x = c
根据 Keras 文档1: sample-wise normalization. This mode assumes a 2D input.,我将批处理规范模式设置为 1
我认为这应该做的只是将批次中的每个样本独立于其他样本进行标准化。然而,当我查看调用函数的源代码时,我看到了以下内容。
elif self.mode == 1:
# sample-wise normalization
m = K.mean(x, axis=-1, keepdims=True)
std = K.std(x, axis=-1, keepdims=True)
x_normed = (x - m) / (std + self.epsilon)
out = self.gamma * x_normed + self.beta
在这里,它只是计算所有x 的平均值,在我的情况下是(BATCH_SIZE, 128, 56, 56) 我认为。我认为它应该在模式 1 下独立于批次中的其他样本进行标准化。所以 axis = 1 不应该吗?另外,文档中的“假设 2D 输入”是什么意思?
【问题讨论】:
标签: python neural-network keras