BatchNormalization

BatchNormalization - 15

版本

此算子版本 自版本 15 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,有五个必需输入:'X'、'scale'、'B'、'input_mean' 和 'input_var'。请注意,在推理模式下(training_mode=False,默认),'input_mean' 和 'input_var' 预期是估计的统计量;在训练模式下(training_mode=True),则是运行统计量。输出数量有多种情况,列举如下:

  • 输出情况 #1:Y, running_mean, running_var (训练模式 training_mode=True)

  • 输出情况 #2:Y (推理模式 training_mode=False)

当 training_mode=False 时,额外的输出无效。当 training_mode=True 时,输出按如下方式更新

running_mean = input_mean * momentum + current_mean * (1 - momentum)
running_var = input_var * momentum + current_var * (1 - momentum)

Y = (X - current_mean) / sqrt(current_var + epsilon) * scale + B

其中

current_mean = ReduceMean(X, axis=all_except_channel_index)
current_var =  ReduceVar(X, axis=all_except_channel_index)

请注意,ReduceVar 指的是总体方差,其等于 sum(sqrd(x_i - x_avg)) / N,其中 N 是总体大小(此公式不使用样本大小 N - 1)。

ReduceMean 和 ReduceVar 的计算使用浮点数以避免 float16 输入的溢出。

当 training_mode=False 时

Y = (X - input_mean) / sqrt(input_var + epsilon) * scale + B

对于之前的(已弃用)非空间情况,建议实现在 BatchNormalization 算子之前将输入形状展平为 (N x C * D1 * D2 * … * Dn)。此算子具有可选输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。空字符串可用于代替实际参数名称以指示缺失参数。末尾的可选参数(后面没有紧跟出现的参数的参数)也可以简单地省略。

属性

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum)。

  • training_mode - INT (默认值 '0')

    如果设置为 true(非零),则表示 BatchNormalization 用于训练,将计算输出 1 和 2。

输入

  • X (异构) - T

    来自上一个算子的输入数据张量;维度形式为 (N x C x D1 x D2 … Dn),其中 N 是批量大小,C 是通道数。统计量是针对 C 的每个通道在 N 和 D1 到 Dn 维度上计算的。对于图像数据,输入维度变为 (N x C x H x W)。该算子也接受大小为 N 的单维度输入,在这种情况下 C 假定为 1。

  • scale (异构) - T1

    形状为 (C) 的缩放张量。

  • B (异构) - T1

    形状为 (C) 的偏置张量。

  • input_mean (异构) - T2

    形状为 (C) 的运行(训练)或估计(测试)平均值张量。

  • input_var (异构) - T2

    形状为 (C) 的运行(训练)或估计(测试)方差张量。

输出

输出数量在 1 到 3 个之间。

  • Y (异构) - T

    形状与 X 相同的输出张量

  • running_mean (可选, 异构) - T2

    BatchNormalization 算子后的运行平均值。

  • running_var (可选, 异构) - T2

    BatchNormalization 算子后的运行方差。此算子使用总体大小 (N) 计算方差,而不是样本大小 N-1。

类型约束

  • T 包含 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。

  • T1 包含 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将缩放和偏置类型约束为浮点张量。

  • T2 包含 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将平均值和方差类型约束为浮点张量。

BatchNormalization - 14

版本

此算子版本 自版本 14 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,有五个必需输入:'X'、'scale'、'B'、'input_mean' 和 'input_var'。请注意,在推理模式下(training_mode=False,默认),'input_mean' 和 'input_var' 预期是估计的统计量;在训练模式下(training_mode=True),则是运行统计量。输出数量有多种情况,列举如下:

输出情况 #1:Y, running_mean, running_var (训练模式 training_mode=True) 输出情况 #2:Y (推理模式 training_mode=False)

当 training_mode=False 时,额外的输出无效。当 training_mode=True 时,输出按如下方式更新

running_mean = input_mean * momentum + current_mean * (1 - momentum)
running_var = input_var * momentum + current_var * (1 - momentum)

Y = (X - current_mean) / sqrt(current_var + epsilon) * scale + B

where:

current_mean = ReduceMean(X, axis=all_except_channel_index)
current_var =  ReduceVar(X, axis=all_except_channel_index)

Notice that ReduceVar refers to the population variance, and it equals to
sum(sqrd(x_i - x_avg)) / N
where N is the population size (this formula does not use sample size N - 1).

当 training_mode=False 时

Y = (X - input_mean) / sqrt(input_var + epsilon) * scale + B

对于之前的(已弃用)非空间情况,建议实现在 BatchNormalization 算子之前将输入形状展平为 (N x C * D1 * D2 * … * Dn)。此算子具有可选输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。空字符串可用于代替实际参数名称以指示缺失参数。末尾的可选参数(后面没有紧跟出现的参数的参数)也可以简单地省略。

属性

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum)。

  • training_mode - INT (默认值 '0')

    如果设置为 true(非零),则表示 BatchNormalization 用于训练,将填充输出 1、2、3 和 4。

输入

  • X (异构) - T

    来自上一个算子的输入数据张量;维度形式为 (N x C x D1 x D2 … Dn),其中 N 是批量大小,C 是通道数。统计量是针对 C 的每个通道在 N 和 D1 到 Dn 维度上计算的。对于图像数据,输入维度变为 (N x C x H x W)。该算子也接受大小为 N 的单维度输入,在这种情况下 C 假定为 1。

  • scale (异构) - T

    形状为 (C) 的缩放张量。

  • B (异构) - T

    形状为 (C) 的偏置张量。

  • input_mean (异构) - U

    形状为 (C) 的运行(训练)或估计(测试)平均值张量。

  • input_var (异构) - U

    形状为 (C) 的运行(训练)或估计(测试)方差张量。

输出

输出数量在 1 到 3 个之间。

  • Y (异构) - T

    形状与 X 相同的输出张量

  • running_mean (可选, 异构) - U

    BatchNormalization 算子后的运行平均值。

  • running_var (可选, 异构) - U

    BatchNormalization 算子后的运行方差。此算子使用总体大小 (N) 计算方差,而不是样本大小 N-1。

类型约束

  • T 包含 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。

  • U 包含 ( tensor(bfloat16), tensor(double), tensor(float), tensor(float16) )

    将平均值和方差类型约束为浮点张量。它允许 U 为所有浮点类型。

BatchNormalization - 9

版本

此算子版本 自版本 9 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,输出数量有多种情况,列举如下:

输出情况 #1:Y, mean, var, saved_mean, saved_var (训练模式) 输出情况 #2:Y (测试模式)

对于之前的(已弃用)非空间情况,建议实现在 BatchNormalization 算子之前将输入形状展平为 (N x C*D1*D2 …*Dn)。此算子具有可选输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。空字符串可用于代替实际参数名称以指示缺失参数。末尾的可选参数(后面没有紧跟出现的参数的参数)也可以简单地省略。

属性

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum)。

输入

  • X (异构) - T

    来自上一个算子的输入数据张量;维度形式为 (N x C x D1 x D2 … Dn),其中 N 是批量大小,C 是通道数。统计量是针对 C 的每个通道在 N 和 D1 到 Dn 维度上计算的。对于图像数据,输入维度变为 (N x C x H x W)。该算子也接受大小为 N 的单维度输入,在这种情况下 C 假定为 1。

  • scale (异构) - T

    形状为 (C) 的缩放张量。

  • B (异构) - T

    形状为 (C) 的偏置张量。

  • mean (异构) - T

    形状为 (C) 的运行(训练)或估计(测试)平均值张量。

  • var (异构) - T

    形状为 (C) 的运行(训练)或估计(测试)方差张量。

输出

输出数量在 1 到 5 个之间。

  • Y (异构) - T

    形状与 X 相同的输出张量

  • mean (可选, 异构) - T

    BatchNormalization 算子后的运行平均值。

  • var (可选, 异构) - T

    BatchNormalization 算子后的运行方差。

  • saved_mean (可选, 异构) - T

    训练期间用于加速梯度计算的保存平均值。

  • saved_var (可选, 异构) - T

    训练期间用于加速梯度计算的保存方差。

类型约束

  • T 包含 ( tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。

BatchNormalization - 7

版本

此算子版本 自版本 7 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,输出数量有多种情况,列举如下:

输出情况 #1:Y, mean, var, saved_mean, saved_var (训练模式) 输出情况 #2:Y (测试模式) 此算子具有可选输入/输出。有关可选参数表示的更多详细信息,请参阅 ONNX IR。空字符串可用于代替实际参数名称以指示缺失参数。末尾的可选参数(后面没有紧跟出现的参数的参数)也可以简单地省略。

属性

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum)。

  • spatial - INT (默认值 '1')

    如果为 true(非零),则计算每个激活的平均值和方差。如果为 false(零),则计算每个 mini-batch 中每个特征的平均值和方差。

输入

  • X (异构) - T

    来自上一个算子的输入数据张量;图像情况下的维度为 (N x C x H x W),其中 N 是批量大小,C 是通道数,H 和 W 是数据的高度和宽度。对于非图像情况,维度形式为 (N x C x D1 x D2 … Dn),其中 N 是批量大小。

  • scale (异构) - T

    如果 spatial 为 true,则 scale 的维度为 (C)。如果 spatial 为 false,则 scale 的维度为 (C x D1 x … x Dn)。

  • B (异构) - T

    如果 spatial 为 true,则 bias 的维度为 (C)。如果 spatial 为 false,则 bias 的维度为 (C x D1 x … x Dn)。

  • mean (异构) - T

    如果 spatial 为 true,则运行平均值(训练)或估计平均值(测试)的维度为 (C)。如果 spatial 为 false,则运行平均值(训练)或估计平均值(测试)的维度为 (C x D1 x … x Dn)。

  • var (异构) - T

    如果 spatial 为 true,则运行方差(训练)或估计方差(测试)的维度为 (C)。如果 spatial 为 false,则运行方差(训练)或估计方差(测试)的维度为 (C x D1 x … x Dn)。

输出

输出数量在 1 到 5 个之间。

  • Y (异构) - T

    形状与 X 相同的输出张量

  • mean (可选, 异构) - T

    BatchNormalization 算子后的运行平均值。

  • var (可选, 异构) - T

    BatchNormalization 算子后的运行方差。

  • saved_mean (可选, 异构) - T

    训练期间用于加速梯度计算的保存平均值。

  • saved_var (可选, 异构) - T

    训练期间用于加速梯度计算的保存方差。

类型约束

  • T 包含 ( tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。

BatchNormalization - 6

版本

此算子版本 自版本 6 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,输出数量有多种情况,列举如下:

输出情况 #1:Y, mean, var, saved_mean, saved_var (训练模式) 输出情况 #2:Y (测试模式)

属性

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值,默认为 1e-5f。

  • is_test - INT (默认值 '0')

    如果设置为非零,则在测试模式下运行空间批归一化,默认为 0。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum),默认为 0.9f。

  • spatial - INT (默认值 '1')

    如果为 true(非零),则计算所有空间元素的平均值和方差。如果为 false(零),则计算每个特征的平均值和方差。默认为 1。

输入

  • X (异构) - T

    来自上一个算子的输入数据张量;图像情况下的维度为 (N x C x H x W),其中 N 是批量大小,C 是通道数,H 和 W 是数据的高度和宽度。对于非图像情况,维度形式为 (N x C x D1 x D2 … Dn),其中 N 是批量大小。

  • scale (异构) - T

    应用于输出的 C 维度 1-维张量形式的缩放。

  • B (异构) - T

    应用于输出的 C 维度 1-维张量形式的偏置。

  • mean (异构) - T

    大小为 C 的 1-维张量形式的运行平均值(训练)或估计平均值(测试)。

  • var (异构) - T

    大小为 C 的 1-维张量形式的运行方差(训练)或估计方差(测试)。

输出

输出数量在 1 到 5 个之间。

  • Y (异构) - T

    形状与 X 相同的输出张量。

  • mean (可选, 异构) - T

    BatchNormalization 算子后的运行平均值。必须与输入平均值原地更新。不应在测试中使用。

  • var (可选, 异构) - T

    BatchNormalization 算子后的运行方差。必须与输入方差原地更新。不应在测试中使用。

  • saved_mean (可选, 异构) - T

    训练期间用于加速梯度计算的保存平均值。不应在测试中使用。

  • saved_var (可选, 异构) - T

    训练期间用于加速梯度计算的保存方差。不应在测试中使用。

类型约束

  • T 包含 ( tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。

BatchNormalization - 1

版本

此算子版本 自版本 1 起可用。

摘要

执行批归一化,如论文 https://arxiv.org/abs/1502.03167 中所述。根据运行模式,输出数量有多种情况,列举如下:

输出情况 #1:Y, mean, var, saved_mean, saved_var (训练模式) 输出情况 #2:Y (测试模式)

属性

  • consumed_inputs - INTS (必需)

    遗留优化属性。

  • epsilon - FLOAT (默认值 '1e-05')

    用于避免除以零的 epsilon 值,默认为 1e-5f。

  • is_test - INT (默认值 '0')

    如果设置为非零,则在测试模式下运行空间批归一化,默认为 0。

  • momentum - FLOAT (默认值 '0.9')

    用于计算运行平均值和方差的因子。例如,running_mean = running_mean * momentum + mean * (1 - momentum),默认为 0.9f。

  • spatial - INT (默认值 '1')

    如果为 true(非零),则计算所有空间元素的平均值和方差。如果为 false(零),则计算每个特征的平均值和方差。默认为 1。

输入

  • X (异构) - T

    形状为 NCHW 的输入 4-维张量。

  • scale (异构) - T

    应用于输出的 C 维度 1-维张量形式的缩放。

  • B (异构) - T

    应用于输出的 C 维度 1-维张量形式的偏置。

  • mean (异构) - T

    大小为 C 的 1-维张量形式的运行平均值(训练)或估计平均值(测试)。

  • var (异构) - T

    大小为 C 的 1-维张量形式的运行方差(训练)或估计方差(测试)。

输出

输出数量在 1 到 5 个之间。

  • Y (异构) - T

    形状与 X 相同的输出 4-维张量。

  • mean (可选, 异构) - T

    BatchNormalization 算子后的运行平均值。必须与输入平均值原地更新。不应在测试中使用。

  • var (可选, 异构) - T

    BatchNormalization 算子后的运行方差。必须与输入方差原地更新。不应在测试中使用。

  • saved_mean (可选, 异构) - T

    训练期间用于加速梯度计算的保存平均值。不应在测试中使用。

  • saved_var (可选, 异构) - T

    训练期间用于加速梯度计算的保存方差。不应在测试中使用。

类型约束

  • T 包含 ( tensor(double), tensor(float), tensor(float16) )

    将输入和输出类型约束为浮点张量。