PyTorch入门实战教程笔记(二十):卷积神经网络CNN 2

PyTorch入门实战教程笔记(二十):卷积神经网络CNN 2

Batch Norm

详细相关论文解读可参考:Batch Normalization(BN层)网络详解,下面我们简要的分析一下,比如我们使用Sigmoid函数时,如果数据过小或者过大会出现梯度弥散的情况(即梯度为零),会很长时间得不到更新,我们会避免使用Sigmoid函数,而是用Relu函数。但是有些场合我们必须使用Sigmoid函数,因此我们有必要把输入的值控制在一定范围内,在输入下层之前,先做一个标准化(normalization)操作,变化到以0为均值,以σ为方差,希望值能够落在0附近,这样再做下一层操作就能够非常方便快捷。
在这里插入图片描述

  1. 在Image Normalization上面有应用,因为图片数据保存在[0, 1]中间,我们做一个Normalization,统计出来三通道(RGB)对应的均值0.485,0.456,0.406,统计出来的方差为 0.229,0.224,0.225。然后经R通道的数据 (xr-0.485)/0.485,G、B通道类似计算。
    在这里插入图片描述
  2. Batch Norm
    我们看一个实例,比如[6, 3, 784],也就是六张图片三个通道,将每一个通道做一个统计数据,会生成[3]的μ,[3]的σ,然后通过zi '= (zi- μ)/σ,会迫使使数据逼近于N(0,1), 然后根据需要再乘以γ的倍数,加β的偏置,使数据毕竟(β, γ)的分布。上述μ和σ是根据当前batch统计出来的,β, γ是我们学出来的,是需要梯度信息的。
    在这里插入图片描述
    在pytorch使用BatchNorm1d()函数对于1d的数据进行操作,参数给定channel数量,然后作一次forward计算之后,会得到每个channel上的均值和方差。下图使用均匀分布(0.5,1)
    在这里插入图片描述
    Batch Normalization标准化的写法:
    在这里插入图片描述
    在pytorch使用BatchNorm2d()函数对于2d的数据进行操作,参数给定channel数量,然后作一次forward计算之后,shape并不变,torch中的layer.weight对应的就是我们前面所述的γ,layer.weight就是β。可以看到,是需要梯度信息的。
    在这里插入图片描述
    需要注意的是,跟Dropout一样,在train和test时,是不一样的,在test这里的μ和σ2不是当前的batch,而是全局的,也就是train得到的值复制给μ和σ2,并且γ和β是不需要更新的。所以要调用layer.eval()这个函数,在使用BatchNorm1d进行一个变换。
    在这里插入图片描述
    所以,Batch Norm的优点在于收敛速度更快了,会得到更好地最优解,也就是表现很好,并且会变得很稳定。

比较经典的卷积神经网络

详细的网络解释:
1、LeNet;2、AlexNet;3、VGG;4、Google

Resnet基本单元代码实现

关于ResNet的理论详解可参考:ResNet-v1残差神经网络详解
由上面分析可知,ResNet是由下面的基本单元堆叠而成的。
在这里插入图片描述
那么,我们只要实现了这个基本单元,然后将他们堆叠一起,就可以实现,所以基本单元的实现是关键。首先,是由第一个conv1 层,再加一个bn1(),第二个conv2 层,再加一个bn2,我们的激活函数直接使用了F.relu()这个激活函数(在forward里面,在上面写也行,都是一样的)。看forward()函数中构建的基本单元,第一行out为一层,第二行out为第二层,第三行out为shortcut connections,即输入与输出图片直接相加和。
注意:在上述详解的文章里已经说到,从整体结构图可以看出,“shortcut connections(捷径连接)”有实线or虚线,区别如下:

  1. 实线的Connection部分:表示输入与输出通道相同,可直接相加即H(x)=F(x)+x (公式1)
  2. 虚线的Connection部分:表示通道数增加时,由于两者通道数不同,而F(x)和x相加时维数必须相等,故采用H(x)=F(x)+ Wsx(公式2),通过执行线性投影Ws(有1×1卷积完成),来调整x的维度。
    也就是说,定义的__init__函数的ch_in 和ch_out不一定channel数是相同的,如果不相同,我们通过1×1的卷积来扩展输入的channel数,以便相加和。代码中使用if语句来判断,通过self.extra来实现,具体如下:
    在这里插入图片描述
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值