mindspore.ops.batch_norm

mindspore.ops.batch_norm(input_x, running_mean, running_var, weight, bias, training=False, momentum=0.1, eps=1e-05)[源代码]

对输入数据进行批量归一化和更新参数。

批量归一化广泛应用于卷积神经网络中。此运算对输入应用归一化,避免内部协变量偏移,详见论文 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 。使用mini-batch数据和学习参数进行训练,学习的参数见如下公式中,

\[y = \frac{x - mean}{\sqrt{variance + \epsilon}} * \gamma + \beta\]

其中, \(\gamma\)weight\(\beta\)bias\(\epsilon\)eps\(mean\)\(x\) 的均值, \(variance\)\(x\) 的方差。

警告

  • 如果该运算用于推理,并且输出”reserve_space_1”和”reserve_space_2”可用,则”reserve_space_1”的值与”mean”相同,”reserve_space_2”的值与”variance”相同。

  • 对于Ascend 310,由于平方根指令,结果精度未能达到1‰。

说明

  • 如果 training 为False,则 running_meanrunning_varweightbias 是Tensor。

  • 如果 training 为True,则 running_meanrunning_varweightbias 是Parameter。

参数:
  • input_x (Tensor) - 数据输入,shape为 \((N, C)\) 的Tensor,数据类型为float16或float32。

  • running_mean (Union[Tensor, Parameter]) - shape为 \((C,)\) ,具有与 weight 相同的数据类型。

  • running_var (Union[Tensor, Parameter]) - shape为 \((C,)\) ,具有与 weight 相同的数据类型。

  • weight (Union[Tensor, Parameter]) - shape为 \((C,)\) ,数据类型为float16或float32。

  • bias (Union[Tensor, Parameter]) - shape为 \((C,)\) ,具有与 weight 相同的数据类型。

  • training (bool) - 如果 trainingTruerunning_meanrunning_var 会在训练过程中进行计算。 如果 trainingFalse ,它们会在推理阶段从checkpoint中加载。默认值:False。

  • momentum (float) - 动态均值和动态方差所使用的动量。(例如 \(new\_running\_mean = (1 - momentum) * running\_mean + momentum * current\_mean\))。动量值必须为[0, 1]。默认值:0.1。

  • eps (float) - 添加到分母上的值,以确保数值稳定性。默认值:1e-5。

返回:

Tensor,数据类型与shape大小与 input_x 相同,其中,shape大小为 \((N, C)\)

异常:
  • TypeError - training 不是bool。

  • TypeError - epsmomentum 的数据类型不是float。

  • TypeError - input_xweightbiasrunning_meanrunning_var 不是Tensor。

  • TypeError - input_xweight 的数据类型既不是float16,也不是float32。

支持平台:

Ascend CPU GPU

样例:

>>> input_x = Tensor(np.ones([2, 2]), mindspore.float32)
>>> running_mean = Tensor(np.ones([2]), mindspore.float32)
>>> running_var = Tensor(np.ones([2]), mindspore.float32)
>>> weight = Tensor(np.ones([2]), mindspore.float32)
>>> bias = Tensor(np.ones([2]), mindspore.float32)
>>> output = ops.batch_norm(input_x, running_mean, running_var, weight, bias)
>>> print(output)
[[1. 1.]
 [1. 1.]]