深度学习中transforms.Normalize和batch normalization详解

文章介绍了torchvision.transforms中的Normalize用于图像预处理,通过标准化每个通道的像素值加速模型收敛。此外,还详细解释了BatchNormalization(BN)层的工作原理,它通过规范化数据分布,防止梯度消失,提升学习效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:transforms.Normalize

代码展示:

data_transforms = transforms.Compose([
        transforms.Resize((h, w), interpolation=3),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

讲解:transforms 来自 torchvision,torchvision.transforms 是常用的图像预处理方法

功能:逐channel(每一张图片有rgb三个通道,每一个通道就是一个channel)的对图像进行标准化(均值变为0,标准差变为1),可以加快模型的收敛

为什么会加快收敛呢? 

1.数据标准化消除了特征之间的尺度差异:在机器学习中,不同的特征可能具有不同的取值范围和尺度。如果某些特征的值域较大,而另一些特征的值域较小,模型可能会更加关注值域较大的特征,从而忽略了其他特征。通过标准化数据,将不同特征的值缩放到相似的尺度,有助于模型更平衡地学习各个特征的权重,避免了不同尺度之间的偏差。

2.标准化可以加快梯度下降算法的收敛速度:梯度下降是常用的优化算法,用于训练神经网络模型。在训练过程中,梯度下降算法通过计算损失函数对模型参数的梯度,并根据梯度的方向来更新参数。如果输入数据没有经过标准化,不同特征的尺度差异会导致参数更新的步长不一致,从而导致梯度下降算法在参数空间中搜索的路径非常不均匀。通过标准化数据,可以使得不同特征的尺度相似,从而使梯度下降算法能够更快地朝着最优解的方向前进。


output = (input - mean) / std
mean:各通道的均值
std:各通道的标准差
inplace:是否原地操作

二:batch normalization

代码展示:这是一个网络前向计算的函数,其中 x = self.model.bn1(x)  就是使用到了batch normalization

    def forward(self, x):
        x = self.model.conv1(x)
        x = self.model.bn1(x)
        x = self.model.relu(x)
        x = self.model.maxpool(x)
        x = self.model.layer1(x)
        x = self.model.layer2(x)
        x = self.model.layer3(x)
        x = self.model.layer4(x)
        x = self.model.avgpool(x)
        x = torch.squeeze(x)
        x = self.classifier(x) #use our classifier.
        return x

讲解:batch normalization 是神经网络中的一个结构,简称bn层,它作用是通过规范化的手段,将越来越偏的分布拉回到标准化的分布,使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题

计算方式分为四部:
1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用求得的均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。其中ε是为了避免除数为0时所使用的微小正数。
4.尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi,这里的γ是尺度因子,β是平移因子。这一步是BN的精髓,由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。 γ和β是在训练时网络自己学习得到的。

公式:

 

如图:数据经过bn层后产生的效果(使得激活函数的输入值落在激活函数对输入比较敏感的区域,从而使梯度变大,加快学习收敛速度,避免梯度消失的问题

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值