你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
批处理规范化
BatchNormalization(input, scale, bias, runMean, runVariance, spatial,
normalizationTimeConstant = 0,
blendTimeConstant = 0, epsilon = 0.00001, useCntkEngine = true)
parameters
input
是批处理规范化节点的输入scale
是 一个 ParameterTensor{} ,它保存以下公式中学习的分量缩放因子 (gamma
术语) 。bias
是一个 ParameterTensor{} ,用于保存学习的偏差 (beta
术语) 。scale
并且bias
必须具有相同的维度,在spatial = false
输出卷积特征映射的数量或数量的情况下spatial = true
必须等于input
维度。runMean
是在评估阶段使用的运行平均值,也可能在训练期间使用。 必须传递与初始值 0 相同的维度scale
和初始bias
值 0 的learningRateMultiplier=0
ParameterTensor{}。runVariance
是正在运行的方差。 它表示的方式与runMean
.spatial
是一个标志,用于指定是单独计算迷你Batch中每个特征的平均值/var,还是针对每个特征映射的卷积层计算平均值/var。normalizationTimeConstant
(默认 0) :计算平均平均值和方差的平均计算时间常量,作为批处理统计信息的低传递筛选版本。 注意:默认值通常不是所需内容。blendTimeConstant
(默认 0) :允许使用正在运行的统计信息平滑批处理估计epsilon
是计算逆标准偏差时添加到方差中的调理常量。useCntkEngine
(默认值:true) :将此项设置为false
选择仅限 GPU 的 cuDNN 实现
返回值
批处理规范化 input
。
说明
BatchNormalization
实现论文 批处理规范化中所述的技术:通过减少内部 Covariate Shift (Sergey Ioffe、Christian Szegedy) 来加速深度网络训练 。
简言之,它规范化每个输出 (特征的每个迷你块的层输出) ,并应用相交转换来保留层的表示形式。 也就是说,对于层 input
:
m = mean (input)
var = variance (input)
inputNorm = (input - mean)/sqrt (epsilon + var)
output = gamma * inputNorm + beta
其中 gamma
和 beta
可训练参数。
mean
并从 variance
训练数据中估计。 在最简单的情况下,它们是训练期间当前迷你块的平均值和方差。 在推理中,将改用长期估计值。
长期估计是小包统计信息的低传递筛选版本,参数) normalizationTimeConstant
样本中的时间常量 (。
一个 0
表示值不会有指数平滑,运行平均值/方差将始终等于 最后一个看到的小块的值。
这通常是不可取的。
相反,建议在此处使用几千个值。
BatchNormalizationLayer{}
包装器的默认值为 5000。
有关时间常量和指数平滑的详细信息: https://en.wikipedia.org/wiki/Exponential_smoothing#Time_Constant
由于小型batch 统计信息可能很干扰,因此CNTK还允许在训练期间使用 MAP (最大后) 估计值,其中运行的长期估计值被视为以前的值。
前面的权重由 blendTimeConstant
参数控制。
然而,到目前为止,我们的实验中还没有发现这一点很有用。
请注意,在推理期间,CNTK将自动设置这两个时间常量,以便仅使用现有的运行平均值,并且不会更新它。 用户不需要显式操作。
cuDNN 实现
默认情况下,此函数使用适用于 GPU 和 CPU 的CNTK实现。 可以选择使用更具性能的 cuDNN 实现。 但是,请注意,cuDNN 实现不支持所有选项,并且训练需要 GPU (CNTK,即使选择 cuDNN 实现) ,也会为推理提供 CPU 仿真。