我是卷积神经网络的新手,只是想知道特征映射以及如何对图像进行卷积以提取特征.我很高兴知道在CNN中应用批量标准化的一些细节.
我读了本文https://arxiv.org/pdf/1502.03167v3.pdf和可以理解的BN算法应用于数据,但最终他们提到,当应用到CNN的轻微修改是必需的:
对于卷积层,我们还希望归一化遵循卷积属性 - 以便在不同位置对同一特征映射的不同元素以相同方式进行归一化.为实现这一目标,我们联合规范了所有地点的小批量激活.在Alg.1,我们令B是该组中跨越小批量的两个元件和空间位置的特征地图的所有值的 - 因此对于小批量大小p×Q的大小为m和特征映射的,我们使用的短跑运动员 - 小型m'= | B |的小批量 = m·pq.我们学习每个特征图的一对参数γ(k)和β(k),而不是每次激活.ALG.类似地修改图2,使得在推理期间,BN变换对给定特征图中的每个激活应用相同的线性变换.
当他们说"以不同位置的相同特征地图的不同元素以相同方式标准化"时,我完全感到困惑 "
我知道哪些特征映射意味着什么,不同的元素是每个特征映射中的权重.但我无法理解什么位置或空间位置意味着什么.
我根本无法理解下面的句子 "在Alg.1中,我们让B成为特征图中所有值的集合,跨越小批量和空间位置的元素"
如果有人冷静地阐述并用更简单的术语解释我,我会很高兴的
machine-learning computer-vision deep-learning conv-neural-network batch-normalization
所述keras BatchNormalization层使用axis=-1作为缺省值和指出该特征轴通常是标准化的.为什么会这样?
我认为这是令人惊讶的,因为我更熟悉使用类似的东西StandardScaler,这相当于使用axis=0.这将单独规范化功能.
有没有理由为什么样本默认(即axis=-1)在keras 中单独归一化而不是特征?
编辑:具体的例子
转换数据是很常见的,因此每个要素的均值和单位方差均为零.让我们只考虑这个模拟数据集的"零均值"部分,其中每一行都是一个样本:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
与axis=0平均值相比,减去平均值是不是更有意义axis=1?使用时axis=1,单位和比例可以完全不同.
编辑2:
部3在第一个方程本文似乎暗示axis=0应该被用于计算特征单独为每个期望和方差,假设你有第(m,n)的形状数据集,其中m是样本的数目,n是数特征.
编辑3:另一个例子
我想看看平均值和方差的维度BatchNormalization是在玩具数据集上计算的:
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from keras.optimizers …Run Code Online (Sandbox Code Playgroud)