表示通过学习数据均值和方差可使输入数据归一化的可训练网层.
BatchNormalizationLayer
表示通过学习数据均值和方差可使输入数据归一化的可训练网层.
更多信息和选项
- BatchNormalizationLayer 通常用在 NetChain、NetGraph 等中,规范并加快网络培训.
- 可以包括以下可选参数:
-
"Epsilon" 0.001` 稳定性参数 Interleaving False 通道维度的位置 "Momentum" 0.9 训练过程中所用的动量 - 当设置 InterleavingFalse 时,通道维度被视为输入和输出数组的第一维.
- 当设置 InterleavingTrue 时,通道维度被视为输入和输出数组的最后一维.
- 可以包括以下可学习数组:
-
"Biases" Automatic 可学习的偏差数组 "MovingMean" Automatic 均值的移动估计 "MovingVariance" Automatic 方差的移动估计 "Scaling" Automatic 可学习的缩放数组 - 如果采用 Automatic 设置,当使用 NetInitialize 或 NetTrain 时,将自动初始化偏差、缩放、移动平均和移动方差数组.
- 可包括以下训练参数:
-
LearningRateMultipliers Automatic 数组的学习速率倍增器 - 如果 LearningRateMultipliers 为 0 或 "Momentum" 为 1,在使用 NetTrain 进行训练期间,BatchNormalizationLayer 冻结 "MovingVariance" 和 "MovingMean" 的值.
- 如果已设定了偏差、缩放、移动平均和移动方差,BatchNormalizationLayer[…][input] 通过应用该网络层显式计算输出.
- BatchNormalizationLayer[…][{input1,input2,…}] 显式计算每一个 inputi 的输出.
- 当 NumericArray 作为输入时,输出将是 NumericArray.
- BatchNormalizationLayer 开放下列端口,以便用于 NetGraph 等中:
-
"Input" 一个向量、矩阵或高价数组 "Output" 一个向量、矩阵或高价数组 - 当它不能从一个更大的网的其他层中推断时,选项 "Input"->{n1,n2,…} 可用于固定 BatchNormalizationLayer 的输入维度.
- NetExtract 可用来从 BatchNormalizationLayer 对象中提取偏差、缩放、移动平均和移动方差数组.
- Options[BatchNormalizationLayer] 给出构建网络层的默认选项列表. Options[BatchNormalizationLayer[…]] 给出在某些数据上运行网络层的默认选项列表.
- Information[BatchNormalizationLayer[…]] 给出关于网络层的报告.
- Information[BatchNormalizationLayer[…],prop] 给出 BatchNormalizationLayer[…] 的属性 prop 的值. 可能的属性与 NetGraph 相同.
范例
打开所有单元 关闭所有单元基本范例 (2)
创建一个 BatchNormalizationLayer:
BatchNormalizationLayer[]创建一个接受向量并返回向量的已初始化的 BatchNormalizationLayer:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 3]batchnorm[{1, 2, 3}]范围 (4)
Ports (2)
创建一个接受 3 阶数组并返回 3 阶数组的已初始化的 BatchNormalizationLayer:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> {2, 3, 3}]batchnorm[RandomReal[1, {2, 3, 3}]]//Normal//MatrixForm创建一个接受向量并返回向量的已初始化的 BatchNormalizationLayer:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 3]batchnorm[{{1, 2, 3}, {4, 0.2, 3}}]使用 NetEvaluationMode 来使用 BatchNormalizationLayer 的训练行为:
batchnorm[{{1, 2, 3}, {4, 0.2, 3}}, NetEvaluationMode -> "Train"]Parameters (2)
"Biases" (1)
创建一个带有 "Biases" 参数初始值的 BatchNormalizationLayer:
batchnorm = BatchNormalizationLayer["Biases" -> {-1, 3.4}]NetExtract[batchnorm, "Biases"]由 NetInitialize 选择的 "Biases" 默认值是零向量:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 2];
NetExtract[batchnorm, "Biases"]"Scaling" (1)
创建一个已初始化的 BatchNormalizationLayer,其中设 "Scaling" 参数为零,"Biases" 参数设为自定义的值:
batchnorm = NetInitialize@BatchNormalizationLayer["Scaling" -> {0, 0, 0}, "Biases" -> {1.3, -22.1, 1.2}]batchnorm[{1, 2, 3}]batchnorm[{-3.4, 2.3, 100}]NetInitialize 选择的 "Scaling" 默认值是 1 的向量:
batchnorm = NetInitialize@BatchNormalizationLayer["Input" -> 2];
NetExtract[batchnorm, "Scaling"]选项 (2)
"Epsilon" (1)
创建一个带有明确指定 "Epsilon" 参数的 BatchNormalizationLayer:
batchnorm = BatchNormalizationLayer["Epsilon" -> 0.1]NetExtract[batchnorm, "Epsilon"]"Momentum" (1)
创建一个 BatchNormalizationLayer,其中明确指定 "Momentum" 参数:
batchnorm = BatchNormalizationLayer["Momentum" -> 0.1]NetExtract[batchnorm, "Momentum"]应用 (1)
BatchNormalizationLayer 通常被插入在 ConvolutionLayer 和它的激活函数之间,以稳定并加速训练:
NetChain[{ConvolutionLayer[3, {3, 3}], BatchNormalizationLayer["Input" -> {3, 28, 28}], ElementwiseLayer[Ramp]}]属性和关系 (1)
在一般的运算中,BatchNormalizationLayer 计算以下函数:
batchNormFunction = Function[Block[{sd = Sqrt[#MovingVariance + #Epsilon]},
(#2 * #Scaling / sd ) + (#Biases - (#Scaling * #MovingMean) / sd)]];在含有一个通道的向量实例上运行 BatchNormalizationLayer:
params = <|"Scaling" -> {3}, "Biases" -> {2}, "MovingMean" -> {1}, "MovingVariance" -> {2}, "Epsilon" -> 0.001|>;
layer = BatchNormalizationLayer@@Normal[params]layer[{5}]//NormalbatchNormFunction[params, {5}]可能存在的问题 (3)
指定 "MovingVariance" 参数的负值,在计算时会导致数值错误:
batchnorm = NetInitialize[BatchNormalizationLayer["Input" -> {1, 2, 2}, "MovingVariance" -> {-2}]]batchnorm[RandomReal[1, {1, 2, 2}]]BatchNormalizationLayer 不可以被初始化,直到知道其所有的输入和输出维数:
NetInitialize@BatchNormalizationLayer[]NetInitialize@BatchNormalizationLayer["Input" -> 3]不能共享 BatchNormalizationLayer 的 "MovingMean" 和 "MovingVariance" 数组:
BatchNormalizationLayer["MovingMean" -> NetArray["MovingMean"]]创建具有共享数组的 BatchNormalizationLayer:
sharedBatchNorm = NetInsertSharedArrays[BatchNormalizationLayer[]]net = NetTrain[NetChain[{2, sharedBatchNorm, 2, sharedBatchNorm, 2}], {{0, 1} -> {1, 0}, {1, 0} -> {0, 1}}]{batchnorm1, batchnorm2} = NetExtract[net, {{2}, {4}}]"Scaling" 和 "Biases" 数组被共享,但 "MovingMean" 或 "MovingVariance" 数组没有:
Normal /@ Information[batchnorm1, "Arrays"]Normal /@ Information[batchnorm2, "Arrays"]技术笔记
相关指南
-
▪
- 神经网络层
文本
Wolfram Research (2016),BatchNormalizationLayer,Wolfram 语言函数,https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html (更新于 2020 年).
CMS
Wolfram 语言. 2016. "BatchNormalizationLayer." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html.
APA
Wolfram 语言. (2016). BatchNormalizationLayer. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html 年
BibTeX
@misc{reference.wolfram_2026_batchnormalizationlayer, author="Wolfram Research", title="{BatchNormalizationLayer}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html}", note=[Accessed: 17-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_batchnormalizationlayer, organization={Wolfram Research}, title={BatchNormalizationLayer}, year={2020}, url={https://reference.wolfram.com/language/ref/BatchNormalizationLayer.html}, note=[Accessed: 17-August-2026]}