nn.BatchNorm1d

本文详细解读了PyTorch中的BatchNorm1d函数,包括其用于加速深度学习训练的原理,参数设置如num_features、eps、momentum的作用,以及手动计算均值、方差与归一化的步骤。通过实例演示了affine参数对输出的影响,并深入探讨了running_mean和running_var在训练与测试中的运用。

本篇博客主要讲解BatchNorm函数的执行过程,需要读者有一定的批归一化的基础,本文例子通俗易懂,如果没有基础也可以阅读

PyTorchBatchNorm有三个函数,这里主要讲解前两个,后面的就很容易理解,首先要明白批归一化是做什么的:BatchNorm在深度网络中用来加速神经网络的训练,能够加速收敛并且可以使用较大的学习率,同时归一化还有一定的正则作用

torch.nn.BatchNorm1d

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True, device=None, dtype=None)

归一化的结果如下所示:
y=x−E[x]Var[x]+ϵ∗γ+β y = \frac{x-E[x]}{\sqrt{Var[x]+\epsilon}}*\gamma + \beta y=Var[x]+ϵ xE[x]γ+β
其中E[x]E[x]E[x]为样本某一维的均值,Var[x]Var[x]Var[x]为样本某一维的方差,注意这里计算方差的时候使用的是有偏估计,对应的函数为torch.var(input, unbiased=False),什么意思呢,就是说计算方差的时候分母为NNN而不是N−1N-1N1,即Var[x]=1N∑i=1N(xi−x‾)Var[x] = \frac{1}{N}\sum_{i=1}^{N} (x_{i}-\overline x)Var[x]=N1i=1N(xix)

  • num_features:输入样本的特征数
  • eps:避免归一化时分母为0
  • momentum:用来计算running_mean和running_var的一个量
  • affine:是否进行缩放平移
  • track_running_stats:是否统计全局的running_mean和running_var

下面通过一个例子来详细介绍各个参数的作用

对于一维数据如下所示,每一行对应的是每一个batch,每一列是这个batch对应的数据维度,比如第一行第一列是第一个batch的第一维数据,第二列是第一个batch的第二维数据,以此类推。我们在批归一化的时候就是对不同patch的相同维度进行的,比如这里就是A1,B1,C1,D1...

1. 初始化

下面我们将nn.BatchNorm1d(2, affine=False)中的affine有的设为了True,有的设为了False,这里默认为True,就是说对于上面公式中的γ和β\gamma和\betaγβ我们是要学习的,在BatchNorm中他们的参数分别为batch.weight以及batch.bias,默认为1和0,之后通过学习反向传播时会发生变化

torch.manual_seed(1)
m = nn.BatchNorm1d(2)  # With Learnable Parameters
n = nn.BatchNorm1d(2, affine=False)  # Without Learnable Parameters
'''
----------------- m -------------------
m: BatchNorm1d(2, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
m.weight.data: tensor([1., 1.])
m.bias.data: tensor([0., 0.])
m.weight.requires_grad: True
m.bias.requires_grad: True      # 这里的weight和bias对应上面的gamma和beta
----------------- n -------------------
n: BatchNorm1d(2, eps=1e-05, mo
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值