nn.BatchNorm2D() 详细解析
paddle.nn.BatchNorm2D(num_features, momentum=0.9, epsilon=1e-05, weight_attr=None, bias_attr=None, data_format='NCHW', name=None):
目的
加速神经网络的收敛过程以及提高训练过程中的稳定性
应用场景
通常用于解决多层神经网络中间层的协方差偏移问题(用了准没错)
行为方式
使一批(Batch)feature map满足均值为0,方差为1的分布规律。这样不仅数据分布一致,而且避免发生梯度消失。
通俗解释
类似于网络输入进行零均值化和方差归一化的操作,不过是在中间层的输入中操作而已。
参数说明
- num_features (int) - 指明输入
Tensor的通道数量。 - epsilon (float, 可选) - 为了数值稳定加在分母上的值。默认值:1e-05。
- momentum (float, 可选) - 此值用于计算
moving_mean和moving_var。默认值:0.9。更新公式如上所示。 - weight_attr (ParamAttr|bool, 可选) - 指定权重参数属性的对象。如果为False, 则表示每个通道的伸缩固定为1,不可改变。默认值为None,表示使用默认的权重参数属性。具体用法请参见 cn_api_ParamAttr 。
- bias_attr (ParamAttr, 可选) - 指定偏置参数属性的对象。如果为False, 则表示每一个通道的偏移固定为0,不可改变。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 cn_api_ParamAttr 。
- data_format (string, 可选) - 指定输入数据格式,数据格式可以为"NCHW"。默认值:“NCHW”。
- name (string, 可选) – BatchNorm的名称, 默认值为None。更多信息请参见 Name 。
代码示例
import paddle
import numpy as np
np.random.seed(123)
x_data = np.random.random(size=(2, 1, 2, 3)).astype('float32')
x = paddle.to_tensor(x_data)
batch_norm = paddle.nn.BatchNorm2D(1)
batch_norm_out = batch_norm(x)
print(batch_norm_out)
输出结果
Tensor(shape=[2, 1, 2, 3], dtype=float32, place=CPUPlace, stop_gradient=False,
[[[[ 1.15392590, -1.18635142, -1.69183910],
[-1.61306620, -0.22713995, -0.12097311]]],
[[[ 1.28710675, 0.09896636, 0.46429396],
[ 0.10046530, 0.45974565, 1.27486539]]]])

nn.BatchNorm2D() 主要用于加速神经网络训练,防止协方差偏移,确保数据在各层间有统一的分布。通过调整均值和方差,该操作有助于网络稳定性和梯度传播。适用于多层神经网络的中间层。参数包括num_features(通道数)、epsilon(数值稳定性参数)、momentum(动量参数)等。
1036

被折叠的 条评论
为什么被折叠?



