batchNormalizationLayer
批处理规范化层
描述
批处理归一层对每个通道的所有观测数据分别进行小批处理。为了加快卷积神经网络的训练并降低对网络初始化的敏感性,在卷积层和非线性层之间使用批量归一化层,如ReLU层。
归一化后,该层用一个可学习的比例因子对输入进行缩放γ然后用一个可学习偏移量平移它β.
创建
描述
创建一个批处理规范化层。层
= batchNormalizationLayer
创建一个批处理规范化层并设置可选层
= batchNormalizationLayer (名称,值
)TrainedMean
,TrainedVariance
,ε
,参数和初始化,学习率和正则化,的名字
属性使用一个或多个名称-值对。例如,batchNormalizationLayer('名称',' batchnorm ')
创建名称为的批处理规范化层“batchnorm”
.
属性
批正常化
TrainedMean
- - - - - -用于预测的平均统计量
数值向量
用于预测的平均统计量,指定为每个通道平均值的数字向量。
的类型取决于层输入的类型trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动将此属性重新塑造为以下大小:
层的输入 | 财产大小 |
---|---|
功能的输入 | NumChannels 1 |
矢量序列输入 | |
一维图像输入 | 1 -NumChannels |
一维图像序列输入 | |
二维图像输入 | 1-by-1-by -NumChannels |
二维图像序列输入 | |
三维图像输入 | 1-by-1-by-1-by -NumChannels |
三维图像序列输入 |
如果BatchNormalizationStatistics
培训选项为“移动”
,然后软件在训练期间使用运行估计值逼近批归一化统计数据,并在训练后设置TrainedMean
而且TrainedVariance
属性分别为移动估计的均值和方差的最新值。
如果BatchNormalizationStatistics
培训选项为“人口”
,然后在网络训练结束后,软件再次遍历数据并设置TrainedMean
而且TrainedVariance
属性分别为从整个训练数据集计算出的平均值和方差。
该层使用TrainedMean
而且TrainedVariance
在预测过程中对输入进行归一化。
数据类型:单
|双
TrainedVariance
- - - - - -方差统计用于预测
数值向量
用于预测的方差统计量,指定为每个通道方差值的数值向量。
的类型取决于层输入的类型trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动将此属性重新塑造为以下大小:
层的输入 | 财产大小 |
---|---|
功能的输入 | NumChannels 1 |
矢量序列输入 | |
一维图像输入 | 1 -NumChannels |
一维图像序列输入 | |
二维图像输入 | 1-by-1-by -NumChannels |
二维图像序列输入 | |
三维图像输入 | 1-by-1-by-1-by -NumChannels |
三维图像序列输入 |
如果BatchNormalizationStatistics
培训选项为“移动”
,然后软件在训练期间使用运行估计值逼近批归一化统计数据,并在训练后设置TrainedMean
而且TrainedVariance
属性分别为移动估计的均值和方差的最新值。
如果BatchNormalizationStatistics
培训选项为“人口”
,然后在网络训练结束后,软件再次遍历数据并设置TrainedMean
而且TrainedVariance
属性分别为从整个训练数据集计算出的平均值和方差。
该层使用TrainedMean
而且TrainedVariance
在预测过程中对输入进行归一化。
数据类型:单
|双
ε
- - - - - -添加到小批量方差的常数
1 e-5
(默认)|数字标量
要添加到小批方差中的常数,指定为等于或大于的数值标量1 e-5
.
该层在归一化之前将该常数添加到小批方差中,以确保数值稳定性并避免除零。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
NumChannels
- - - - - -输入通道数
“汽车”
(默认)|正整数
此属性是只读的。
输入通道的数量,指定为下列之一:
“汽车”
-在训练时自动确定输入通道数。正整数-为指定的输入通道数量配置层。
NumChannels
并且层中输入数据的通道数量必须匹配。例如,如果输入是RGB图像,则NumChannels
一定是3。如果输入是带有16个滤波器的卷积层的输出,则NumChannels
必须是16岁。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
|字符
|字符串
参数和初始化
ScaleInitializer
- - - - - -函数初始化通道比例因子
“的”
(默认)|“narrow-normal”
|函数处理
函数初始化通道比例因子,指定为以下之一:
“的”
-用1初始化通道比例因子。“零”
-用零初始化通道比例因子。“narrow-normal”
-通过从均值为零、标准差为0.01的正态分布中独立采样,初始化通道尺度因子。函数句柄——使用自定义函数初始化通道比例因子。如果指定了函数句柄,则该函数必须为
Scale = func(sz)
,在那里深圳
是秤的大小。有关示例,请参见指定自定义权重初始化函数.
层只初始化通道比例因子时规模
属性为空。
数据类型:字符
|字符串
|function_handle
OffsetInitializer
- - - - - -函数初始化通道偏移量
“零”
(默认)|“的”
|“narrow-normal”
|函数处理
函数初始化通道偏移量,指定为以下之一:
“零”
-用0初始化通道偏移量。“的”
-用1初始化通道偏移量。“narrow-normal”
-通过从均值为零、标准差为0.01的正态分布中独立采样,初始化通道偏移量。函数句柄——使用自定义函数初始化通道偏移量。如果指定了函数句柄,则该函数必须为
Offset = func(sz)
,在那里深圳
是秤的大小。有关示例,请参见指定自定义权重初始化函数.
层只初始化通道偏移时抵消
属性为空。
数据类型:字符
|字符串
|function_handle
规模
- - - - - -渠道规模因子
[]
(默认)|数值向量
渠道规模因子γ,指定为数值向量。
信道尺度因子是可学习的参数。当你训练一个网络时,如果规模
非空吗trainNetwork
使用规模
属性作为初始值。如果规模
那么是空的trainNetwork
所指定的初始化式ScaleInitializer
.
的类型取决于层输入的类型trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动将此属性重新塑造为以下大小:
层的输入 | 财产大小 |
---|---|
功能的输入 | NumChannels 1 |
矢量序列输入 | |
一维图像输入 | 1 -NumChannels |
一维图像序列输入 | |
二维图像输入 | 1-by-1-by -NumChannels |
二维图像序列输入 | |
三维图像输入 | 1-by-1-by-1-by -NumChannels |
三维图像序列输入 |
数据类型:单
|双
抵消
- - - - - -通道补偿
[]
(默认)|数值向量
通道补偿β,指定为数值向量。
信道偏移量是可学习的参数。当你训练一个网络时,如果抵消
非空吗trainNetwork
使用抵消
属性作为初始值。如果抵消
那么是空的trainNetwork
所指定的初始化式OffsetInitializer
.
的类型取决于层输入的类型trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动将此属性重新塑造为以下大小:
层的输入 | 财产大小 |
---|---|
功能的输入 | NumChannels 1 |
矢量序列输入 | |
一维图像输入 | 1 -NumChannels |
一维图像序列输入 | |
二维图像输入 | 1-by-1-by -NumChannels |
二维图像序列输入 | |
三维图像输入 | 1-by-1-by-1-by -NumChannels |
三维图像序列输入 |
数据类型:单
|双
MeanDecay
- - - - - -移动平均计算的衰减值
0.1(默认)|数值标量之间0
而且1
移动平均值计算的衰减值,指定为之间的数值标量0
而且1
.
当BatchNormalizationStatistics
培训选项为“移动”
,在每次迭代中,该层使用更新移动平均值
在哪里 表示更新后的平均值, 表示衰减的平均值, 表示层输入的平均值,和 表示移动平均值的最新值。
如果BatchNormalizationStatistics
培训选项为“人口”
,则此选项无效。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
VarianceDecay
- - - - - -移动方差计算的衰减值
0.1(默认)|数值标量之间0
而且1
用于移动方差计算的衰减值,指定为之间的数值标量0
而且1
.
当BatchNormalizationStatistics
培训选项为“移动”
,在每次迭代中,该层使用更新移动方差值
在哪里 表示更新后的方差, 表示方差衰减值, 表示层输入的方差,和 表示移动方差值的最新值。
如果BatchNormalizationStatistics
培训选项为“人口”
,则此选项无效。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
学习率和正则化
ScaleLearnRateFactor
- - - - - -学习率因子为尺度因子
1
(默认)|负的标量
缩放因子的学习率因子,指定为非负标量。
该软件将该因子乘以全局学习率,以确定一层中尺度因子的学习率。例如,如果ScaleLearnRateFactor
是2
,则该层中尺度因子的学习率为当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
OffsetLearnRateFactor
- - - - - -偏移的学习率因子
1
(默认)|负的标量
偏移量的学习率因子,指定为非负标量。
该软件将该因子乘以全局学习率,以确定一层中偏移量的学习率。例如,如果OffsetLearnRateFactor
是2
,则该层中偏移量的学习率为当前全局学习率的两倍。属性指定的设置来确定全局学习率trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
ScaleL2Factor
- - - - - -l2尺度因子的正则化因子
1
(默认)|负的标量
l2比例因子的正则化因子,指定为非负标量。
软件将这个因子乘以全局L2正则化因子来确定一层中尺度因子的学习率。例如,如果ScaleL2Factor
是2
然后是L2层中偏移量的正则化是全局L的两倍2正则化因子。可以指定全局L2正则化因子使用trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
OffsetL2Factor
- - - - - -l2偏移量的正则化因子
1
(默认)|负的标量
l2偏移量的正则化因子,指定为非负标量。
软件将这个因子乘以全局L2正则化因子来确定一层中偏移量的学习率。例如,如果OffsetL2Factor
是2
然后是L2层中偏移量的正则化是全局L的两倍2正则化因子。可以指定全局L2正则化因子使用trainingOptions
函数。
数据类型:单
|双
|int8
|int16
|int32
|int64
|uint8
|uint16
|uint32
|uint64
层
的名字
- - - - - -层的名字
”
(默认)|特征向量|字符串标量
层名,指定为字符向量或字符串标量。为层
数组输入时,trainNetwork
,assembleNetwork
,layerGraph
,dlnetwork
函数自动为具有该名称的层分配名称”
.
数据类型:字符
|字符串
NumInputs
- - - - - -输入数量
1
(默认)
此属性是只读的。
该层的输入数量。该层只接受单个输入。
数据类型:双
InputNames
- - - - - -输入名字
{'在'}
(默认)
此属性是只读的。
输入层的名称。该层只接受单个输入。
数据类型:细胞
NumOutputs
- - - - - -输出数
1
(默认)
此属性是只读的。
层的输出数量。这个图层只有一个输出。
数据类型:双
OutputNames
- - - - - -输出的名字
{“出”}
(默认)
此属性是只读的。
输出层的名称。这个图层只有一个输出。
数据类型:细胞
例子
创建批处理规范化层
用名称创建一个批处理规范化层“BN1”
.
层= batchNormalizationLayer(“名字”,“BN1”)
layer = BatchNormalizationLayer with properties: Name: 'BN1' NumChannels: 'auto'超参数MeanDecay: 0.1000 VarianceDecay: 0.1000 Epsilon: 1.0000 -05 Learnable Parameters偏移量:[]Scale: [] State Parameters TrainedMean: [] TrainedVariance:[]显示所有属性
中包含批处理规范化层层
数组中。
图层= [imageInputLayer([32 32 3])卷积2dlayer (3,16,“填充”,1) maxPooling2dLayer(2,“步”32岁的,2)convolution2dLayer (3“填充”,1) batchNormalizationLayer reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer
带有图层的图层数组:1”的形象输入32 x32x3图像zerocenter正常化2”二维卷积16 3 x3的隆起与步幅[1]和填充[1 1 1 1]3“批量标准化批量标准化4”ReLU ReLU 5”二维最大池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]6”二维卷积32 3 x3的隆起与步幅[1]和填充[1 1 1 1]7“批量标准化批量标准化8”ReLU ReLU 9“完全连接10完全连接层”Softmax Softmax 11”分类输出
算法
批处理规范化层
批处理归一层对每个通道的所有观测数据分别进行小批处理。为了加快卷积神经网络的训练并降低对网络初始化的敏感性,在卷积层和非线性层之间使用批量归一化层,如ReLU层。
该层首先通过减去迷你批平均值并除以迷你批标准差来规范化每个通道的激活。然后,该层将输入按可学习偏移量移动β然后用一个可学习的比例因子来衡量γ.β而且γ它们本身是可学习的参数,在网络训练期间更新。
批处理归一化层将通过神经网络传播的激活和梯度归一化,使网络训练成为一个更容易的优化问题。为了充分利用这一事实,您可以尝试提高学习率。由于优化问题更容易,参数更新可以更大,网络可以更快地学习。你也可以试着减少L2以及dropout正则化。使用批处理归一化层,训练期间特定图像的激活取决于哪些图像恰好出现在同一个小批处理中。为了充分利用这种正则化效应,可以尝试在每个训练阶段之前对训练数据进行洗牌。若要指定在训练期间打乱数据的频率,请使用“洗牌”
的名称-值对参数trainingOptions
.
批归一化操作将元素归一化x我首先计算平均值μB和方差σB2在空间,时间和观测维度上为每个通道独立。然后,计算归一化激活为
在哪里ϵ是在方差很小时提高数值稳定性的常数。
为了考虑均值和单位方差为零的输入对于后续批处理归一化操作不是最优的可能性,批处理归一化操作使用转换进一步转移和缩放激活
其中偏移量β还有比例因子γ是在网络训练期间更新的可学习参数。
为了在训练后用网络进行预测,批量归一化需要一个固定的均值和方差来归一化数据。这个固定的平均值和方差可以从训练后的训练数据中计算出来,或者在训练期间使用运行统计计算来近似。
如果BatchNormalizationStatistics
培训选项为“移动”
,然后软件在训练期间使用运行估计值逼近批归一化统计数据,并在训练后设置TrainedMean
而且TrainedVariance
属性分别为移动估计的均值和方差的最新值。
如果BatchNormalizationStatistics
培训选项为“人口”
,然后在网络训练结束后,软件再次遍历数据并设置TrainedMean
而且TrainedVariance
属性分别为从整个训练数据集计算出的平均值和方差。
该层使用TrainedMean
而且TrainedVariance
在预测过程中对输入进行归一化。
图层输入和输出格式
层数组或层图中的层将数据以格式化的方式传递给后续层dlarray
对象。的格式dlarray
对象是一个字符串,其中每个字符描述了数据的对应维度。格式由一个或多个字符组成:
“S”
——空间“C”
——频道“B”
——批“T”
——时间“U”
——未指明的
例如,表示为4-D数组的2-D图像数据,其中前两个维度对应于图像的空间维度,第三个维度对应于图像的通道,第四个维度对应于批处理维度,可以被描述为具有格式“SSCB”
(空间,空间,通道,批次)。
你可以与它们交互dlarray
对象在自动区分工作流程中,如开发自定义层,使用functionLayer
对象,或使用向前
而且预测
功能与dlnetwork
对象。
的支持输入格式BatchNormalizationLayer
对象和相应的输出格式。类的自定义层,该自定义层不继承nnet.layer.Formattable
类,或FunctionLayer
对象的Formattable
选项设置为假
,则该层接收一个未格式化的dlarray
对象,其尺寸顺序对应于本表中概述的格式。
输入格式 | 输出格式 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
参考文献
约菲、谢尔盖和克里斯蒂安·塞格迪。“批处理归一化:通过减少内部协变量移位加速深度网络训练。”预印本,2015年3月2日提交。https://arxiv.org/abs/1502.03167。
扩展功能
C/ c++代码生成
使用MATLAB®Coder™生成C和c++代码。
GPU代码生成
使用GPU Coder™为NVIDIA®GPU生成CUDA®代码。
版本历史
在R2017b中引入
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。