批量归一化

批量归一化 - 15

版本

  • 名称: BatchNormalization (GitHub)

  • 域名: main

  • since_version: 15

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本15起可用。

摘要

执行批量归一化,如论文中所述 https://arxiv.org/abs/1502.03167。根据运行的模式, 有五个必需的输入‘X’、‘scale’、‘B’、‘input_mean’和 ‘input_var’。 请注意,‘input_mean’和‘input_var’在推理模式下(training_mode=False,默认)预计为估计的统计量, 在训练模式下(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 的计算使用 float 以避免 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值。

  • 动量 - 浮点数 (默认值为 '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:

    形状为©的张量缩放。

  • B (异质的) - T1:

    形状为©的偏置张量。

  • input_mean (异构) - T2:

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

  • input_var (异构) - T2:

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

输出

在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) ) 中:

    将均值和方差类型限制为浮点张量。

批量归一化 - 14

版本

  • 名称: BatchNormalization (GitHub)

  • 域名: main

  • since_version: 14

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: True

此版本的运算符自版本14起可用。

摘要

执行批量归一化,如论文中所述 https://arxiv.org/abs/1502.03167。根据运行的模式, 有五个必需的输入‘X’、‘scale’、‘B’、‘input_mean’和 ‘input_var’。 请注意,‘input_mean’和‘input_var’在推理模式下(training_mode=False,默认)预计为估计的统计量, 在训练模式下(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值。

  • 动量 - 浮点数 (默认值为 '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:

    形状为©的张量缩放。

  • B(异质的) - T

    形状为©的偏置张量。

  • input_mean (异构) - U:

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

  • input_var (异构) - U:

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

输出

在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使用所有浮点类型。

批量归一化 - 9

版本

此版本的运算符自版本9起可用。

总结

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

输出情况 #1: Y, 均值, 方差, 保存的均值, 保存的方差 (训练模式) 输出情况 #2: Y (测试模式)

对于之前(已弃用)的非空间情况,建议实现者在进行BatchNormalization操作之前将输入形状展平为(N x CD1D2 …*Dn)。此操作符具有可选的输入/输出。有关可选参数表示的更多详细信息,请参见ONNX IR。可以使用空字符串代替实际参数的名称来表示缺少的参数。尾随的可选参数(那些后面没有实际参数的)也可以简单地省略。

属性

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

    用于避免除以零的epsilon值。

  • 动量 - 浮点数 (默认值为 '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:

    形状为©的张量缩放。

  • B(异质的) - T

    形状为©的偏置张量。

  • mean (异质的) - T:

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

  • var (异构) - T:

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

输出

在1到5个输出之间。

  • Y (异构) - T:

    输出张量与X的形状相同

  • mean (可选, 异构) - T:

    BatchNormalization 操作符后的运行平均值。

  • var(可选,异构)- T:

    BatchNormalization 操作后的运行方差。

  • saved_mean(可选,异构)- T:

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

  • saved_var(可选,异构) - T:

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

类型约束

  • T 在 ( tensor(double), tensor(float), tensor(float16) ) 中:

    将输入和输出类型限制为浮点张量。

批量归一化 - 7

版本

此版本的运算符自版本7起可用。

摘要

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

输出情况 #1: Y, 均值, 方差, 保存的均值, 保存的方差 (训练模式) 输出情况 #2: Y (测试模式) 此操作符具有可选的输入/输出。有关可选参数表示的更多详细信息,请参见ONNX IR。可以使用空字符串代替实际参数的名称来表示缺少的参数。尾随的可选参数(后面没有实际参数的参数)也可以简单地省略。

属性

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

    用于避免除以零的epsilon值。

  • 动量 - 浮点数 (默认值为 '0.9'):

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

  • 空间 - INT(默认值为 '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:

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

  • B(异质的) - T

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

  • mean (异质的) - T:

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

  • var (异构) - T:

    如果spatial为true,则运行方差(训练)或估计方差(测试)的维度为©。如果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) ) 中:

    将输入和输出类型限制为浮点张量。

批量归一化 - 6

版本

此版本的运算符自版本6起可用。

摘要

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

输出情况 #1: Y, 均值, 方差, 保存的均值, 保存的方差 (训练模式) 输出情况 #2: Y (测试模式)

属性

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

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

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

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

  • 动量 - 浮点数 (默认值为 '0.9'):

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

  • spatial - INT (默认为 '1'):

    如果为真,计算所有空间元素的均值和方差。如果为假,计算每个特征的均值和方差。默认值为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的一维张量应用于输出的比例。

  • B(异质的) - T

    偏置作为大小为C的一维张量,应用于输出。

  • mean (异质的) - T:

    运行均值(训练)或估计均值(测试)作为大小为C的一维张量。

  • var (异构) - T:

    运行方差(训练)或估计方差(测试)作为大小为C的一维张量。

输出

在1到5个输出之间。

  • Y (异构) - T:

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

  • mean (可选, 异构) - T:

    BatchNormalization 操作符后的运行均值。必须与输入均值就地操作。不应用于测试。

  • var(可选,异构)- T:

    BatchNormalization 操作后的运行方差。必须与输入变量 var 就地使用。不应用于测试。

  • saved_mean(可选,异构)- T:

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

  • saved_var(可选,异构) - T:

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

类型约束

  • T 在 ( tensor(double), tensor(float), tensor(float16) ) 中:

    将输入和输出类型限制为浮点张量。

批量归一化 - 1

版本

  • 名称: BatchNormalization (GitHub)

  • 域名: main

  • since_version: 1

  • 函数: False

  • support_level: SupportType.COMMON

  • 形状推断: False

此版本的运算符自版本1起可用。

摘要

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

输出情况 #1: Y, 均值, 方差, 保存的均值, 保存的方差 (训练模式) 输出情况 #2: Y (测试模式)

属性

  • consumed_inputs - INTS(必填):

    遗留优化属性。

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

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

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

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

  • 动量 - 浮点数 (默认值为 '0.9'):

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

  • spatial - INT (默认为 '1'):

    如果为真,计算所有空间元素的均值和方差。如果为假,计算每个特征的均值和方差。默认值为1。

输入

  • X (异构) - T:

    输入的四维张量,形状为NCHW。

  • scale (异构) - T:

    作为大小为C的一维张量应用于输出的比例。

  • B(异质的) - T

    偏置作为大小为C的一维张量,应用于输出。

  • mean (异质的) - T:

    运行均值(训练)或估计均值(测试)作为大小为C的一维张量。

  • var (异构) - T:

    运行方差(训练)或估计方差(测试)作为大小为C的一维张量。

输出

在1到5个输出之间。

  • Y (异构) - T:

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

  • mean (可选, 异构) - T:

    BatchNormalization 操作符后的运行均值。必须与输入均值就地操作。不应用于测试。

  • var(可选,异构)- T:

    BatchNormalization 操作后的运行方差。必须与输入变量 var 就地使用。不应用于测试。

  • saved_mean(可选,异构)- T:

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

  • saved_var(可选,异构) - T:

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

类型约束

  • T 在 ( tensor(double), tensor(float), tensor(float16) ) 中:

    将输入和输出类型限制为浮点张量。