keras批次标准化(BatchNormalization)层使用轴=-1作为默认值,并说明特征轴通常是标准化的。为什么会这样?
我想这是令人惊讶的,因为我更熟悉使用标准缩放器之类的东西,这相当于使用轴=0。这将分别规范化特征。
在KERA中,相对于特征,样本在默认情况下被单独归一化(即轴=-1)有什么原因吗?
编辑:混凝土示例
转换数据以使每个特征具有零均值和单位方差是很常见的。让我们考虑一下这个模拟数据集的“零均值”部分,其中每一行都是一个样本:
>>> data = np.array([[ 1, 10, 100, 1000],
[ 2, 20, 200, 2000],
[ 3, 30, 300, 3000]])
>>> data.mean(axis=0)
array([ 2., 20., 200., 2000.])
>>> data.mean(axis=1)
array([ 277.75, 555.5 , 833.25])
减去轴=0的平均值,而不是轴=1的平均值,不是更有意义吗?使用轴=1,单位和刻度可以完全不同。
编辑2:
本文第3节的第一个方程似乎暗示轴=0
应用于单独计算每个特征的期望和方差,假设您有一个(m, n)形状的数据集,其中m是样本数,n是特征数。
编辑3:另一个示例
我想看看在玩具数据集上计算的均值和方差的维度:
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from keras.optimizers import Adam
from keras.models import Model
from keras.layers import BatchNormalization, Dense, Input
iris = load_iris()
X = iris.data
y = pd.get_dummies(iris.target).values
input_ = Input(shape=(4, ))
norm = BatchNormalization()(input_)
l1 = Dense(4, activation='relu')(norm)
output = Dense(3, activation='sigmoid')(l1)
model = Model(input_, output)
model.compile(Adam(0.01), 'categorical_crossentropy')
model.fit(X, y, epochs=100, batch_size=32)
bn = model.layers[1]
bn.moving_mean # <tf.Variable 'batch_normalization_1/moving_mean:0' shape=(4,) dtype=float32_ref>
输入X具有形状(150,4),并且计算的批次归一化层表示4,这意味着它在轴=0上运行。
如果批处理规范化(BatchNormalization)的默认值为轴=-1,那么不应该有150个平均值吗?
如果您的小批次是矩阵a mxn,即m个样本和n个特征,则规格化轴应为轴=0。正如您所说,我们想要的是分别规范化每个特征,keras中的默认轴=-1,因为当在卷积层中使用时,地物数据集的维度通常是(样本、宽度、高度、通道),批次样本是沿着通道轴(最后一个轴)规范化的。
我知道这篇帖子很老了,但我仍然在回答它,因为Keras文档中仍然存在困惑。我必须通过代码来解决这个问题:
混淆是由于np.mean
中的轴
与BatchNormize
中的轴
的含义。
当我们沿着一个轴取平均值时,我们折叠该维度并保留所有其他维度。在您的示例中,数据。平均值(轴=0)折叠0轴,这是数据的垂直尺寸。
当我们沿着一个轴计算批次归一化时,我们保留数组的维数,并根据其他轴上的平均值和标准偏差进行归一化。因此,在您的2D示例中,轴为1的批次标准化(BatchNormalization)是减去轴为0的平均值,正如您所期望的那样。这就是bn的原因。移动平均值具有形状(4,)。
我试图在Keras中创建一个带有输入(批次、通道(3)、64、32)的神经网络,但我使用批次标准化时出现了错误(因为错误从提到的层开始,我选择隔离导致错误的部分)。模型开始如下: 我收到以下异常: 对于输入形状为[1,32,1,1],“batch\u normalization\u 1/cond/Reformate\u 4”(操作:“Reformate”)的形状必须为秩1,但为秩0。 我认为数据从
我正在尝试实现批处理规范化(http://arxiv.org/pdf/1502.03167.pdf)在我的卷积神经网络中,我真的很困惑,我应该围绕什么轴来计算均值和方差。 如果conv层的输入为3*224*224*32的形状,其中: 3-输入通道 224*224-单通道形状 32-小批量大小 以下公式中的轴应该是多少?平均值=numpy。平均值(输入层,轴=?) 并且,如果完全连接层的输入为100
本节我们介绍批量归一化(batch normalization)层,它能让较深的神经网络的训练变得更加容易 [1]。在 “实战Kaggle比赛:预测房价” 一节里,我们对输入数据做了标准化处理:处理后的任意一个特征在数据集中所有样本上的均值为0、标准差为1。标准化处理输入数据使各个特征的分布相近:这往往更容易训练出有效的模型。 通常来说,数据标准化预处理对于浅层模型就足够有效了。随着模型训练的进行
我的问题是批处理规范化(BN)正在规范化什么。 我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。 具体而言,BN在X上运行。比如说,。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。 因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gam
我用TensorFlow来解决一个多目标回归问题。具体地说,在具有逐像素标记的卷积网络中,输入为图像,标签为“热图”,其中每个像素具有浮点值。更具体地说,每个像素的地面真值标记的下界为零,虽然技术上没有上界,但通常不会大于1e-2。 在不进行批量归一化的情况下,该网络能够给出合理的热图预测。通过批量归一化,网络需要很长时间才能获得合理的损耗值,而它所做的最好的工作就是使每个像素都成为平均值。这是使
Torch在link