python batch normalization_python – Keras BatchNormalization,样本明智规范化究竟是什么?...

我想弄清楚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

我将批量标准模式设置为1,根据Keras文档1:样本标准化.此模式假定为2D输入.

我认为这应该做的只是将批次中的每个样本标准化,而不是每个其他样本.但是,当我查看调用函数的源代码时,我看到以下内容.

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中,我认为它应该独立于批处理中的其他样本进行标准化.所以不应该轴= 1?在文档中还有什么“假设2D输入”?

最佳答案

In this it is just computing the mean over all of x which in my case is (BATCH_SIZE, 128, 56, 56) I think.

通过这样做,您已经违反了该图层的合同.这不是二维而是四维输入.

I thought it was supposed to normalize independent of the other samples in the batch when in mode 1

确实如此. K.mean(…,axis = -1)正在减小轴-1,它与输入的最后一个轴同义.因此,假设输入形状为(batchsz,features),轴-1将成为特征轴.

由于K.mean与numpy.mean非常相似,你可以自己测试一下:

>>> x = [[1,2,3],[4,5,6]]

>>> x

array([[1, 2, 3],

[4, 5, 6]])

>>> np.mean(x, axis=-1)

array([ 2., 5.])

您可以看到批次中每个样本的特征都减少了.

`tf.keras.layers.LayerNormalization` 是 TensorFlow 中的一个层,用于实现层归一化(Layer Normalization)操作。 层归一化是一种归一化技术,旨在在深度神经网络中减少内部协变量偏移(Internal Covariate Shift)。它可以将每个样本的特征进行归一化,而不是整个批次。 层归一化的计算方式如下: 1. 对于一个输入张量 x,计算其均值 μ 和方差 σ。 2. 使用以下公式对输入进行归一化:(x - μ) / sqrt(σ^2 + ε),其中 ε 是一个小的常数,用于防止除以零。 3. 使用两个可训练参数(缩放因子和偏移量)对归一化后的值进行缩放和平移:gamma * 归一化值 + beta。 `tf.keras.layers.LayerNormalization` 可以作为神经网络模型的一层,在模型中应用层归一化操作。它可以应用于任何维度的输入张量,并且可以在训练过程中自动更新可训练参数。 以下是一个使用 `tf.keras.layers.LayerNormalization` 的简单示例: ```python import tensorflow as tf # 创建一个 LayerNormalization 层 layer_norm = tf.keras.layers.LayerNormalization() # 创建一个输入张量 input_tensor = tf.keras.Input(shape=(64,)) # 应用层归一化操作 normalized_tensor = layer_norm(input_tensor) # 创建一个模型 model = tf.keras.Model(inputs=input_tensor, outputs=normalized_tensor) ``` 在上述示例中,`input_tensor` 是一个形状为 (batch_size, 64) 的输入张量。`normalized_tensor` 是应用层归一化操作后的输出张量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值