首页 > 编程知识 正文

pytorch batchnorm2d参数,pytorch batchnorm2d

时间:2023-05-04 21:25:37 阅读:220916 作者:2739

作用

机器学习中,进行模型训练之前,需对数据做归一化处理,使其分布一致。在深度神经网络训练过程中,通常一次训练是一个batch,而非全体数据。在训练过程中,数据分布会发生变化,对下一层网络的学习带来困难。BatcNormalization强行将数据拉回到均值为0,方差为1的正太分布上,一方面使得数据分布一致,另一方面避免梯度消失

class torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True)

num_features: 一般输入参数为batch_sizenum_featuresheight*width,即为其中特征的数量(输入神经网络的通道数)。

eps: 保证数值稳定性,分母不能为零,默认为1e-5。

momentum: 动态均值和动态方差所使用的动量,即一个用于运行过程中均值和方差的一个估计参数,默认值为0.1。

affine: 一个布尔值,当设为true,给该层添加可学习的仿射变换参数,即给定可以学习的系数矩阵 gamma和beta。其中的affine指定是否需要仿射,也就是是否需要上面算式的第四个,如果affine=False则γ=1,β=0,并且不能学习被更新。一般都会设置成affine=True。

数学公式

BatchNorm2d()函数数学原理如下:

在对小批量数据计算时,其中x为需要归一化的输入数据,mean(x)和Var(x)为批量数据的均值和方差,eps为防止分母出现零所增加的变量,gamma 和beta是可学习的参数向量(在【0,1】范围)

代码理解

对于一批数据,需要计算各个维度上的均值和标准差,一批数据有几个维度,就有几个均值,一批数据N×C×W×H(64,16,256,858),均值有16个

Y = nn.BatchNorm2d(16,affine=True) input = torch.randn(64,16,256,858) output = Y(input) print(Y) print(output)

更详细的参考链接

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。