pytorch学习笔记(十):卷积神经网络CNN(进阶篇)

文章目录

    • 1、GoogleNet
    • 2、重复部分封装
      • 1.Concatenate
      • 2.1*1卷积核
        • 1.信息聚合
        • 2.简化计算
    • 3、程序书写
    • 4、残差网络的引入——解决梯度消失的问题
      • 1.梯度消失
      • 2.残差网络 Residual Net
      • 3.程序表达

1、GoogleNet

pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第1张图片
如图是经典网络GoogleNet的网络结构图,如果将每层均用上篇内容的表示方法,则代码过于冗长。观察到网络结构中有很多重复部分,因此可以使用Class对重复部分进行封装。

2、重复部分封装

1.Concatenate

pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第2张图片
如图所示是GoogleNet中反复出现的网络结构,由于不清楚哪种网络结构的训练效果最好,因此分成多条支路分别进行训练,训练较好的支路的权重也会变大。Concatenate的作用就是将不同结果进行拼接。注:该拼接必须保证结果的长宽一致即W-H一致。

2.1*1卷积核

1.信息聚合

在上面的网络结构中,使用了多个1*1的卷积核,它的意义是信息的聚合。
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第3张图片
上图中,使用了1*1卷积核之后,所获得的结果矩阵融合了三个通道的信息。例如,在考试科目中,计算总分进行比较,也是一种信息聚合。

2.简化计算

1*1卷积核另外一个作用是简化计算量。
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第4张图片
如图的网络结构中,使用11卷积核之后,计算量减小到了原来的1/10,主要原因是11卷积核能够直接改变通道的数量。

3、程序书写

pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第5张图片
注意,由于要保证所有输出的长宽一致,因此要在部分卷积核中合理设置padding数值,padding数值怎么设,参考本专栏上一篇文章。
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第6张图片
拼合结果如图所示,不同块的结果长宽一致,通道数可以不一致。
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第7张图片
拼接使用torch.cat,dim=1代表沿着第二个维度拼接。维度是【b,c,w,h],第二个即为channel。

整体代码:
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第8张图片
程序中第二个卷积层输入通道为88,88由四个输出的拼接通道数相加获得。

4、残差网络的引入——解决梯度消失的问题

1.梯度消失

神经网络的反向传播通常使用的是梯度下降,由链式法则可知,越到后面的梯度需要做的乘积越多,若很多前面的梯度非常小,乘积的结果就越来越小,最后趋向0,这就是梯度消失。
如果出现梯度消失,每次训练相应权重的改变量就极小,相当于原地踏步,无法训练。

2.残差网络 Residual Net

pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第9张图片
在残差网络中,将一层的输入相加到输出,那么求H(x)对x求导的结果始终大于1,就不会出现梯度消失。
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第10张图片
在残差网络中,由于是输入要和输出相加,则必须满足输入的大小和输出的大小一致。图中的虚线部分,跨越的网络大小发生变化,因此需要对输入进行特殊处理,以保证大小一致。

3.程序表达

pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第11张图片
pytorch学习笔记(十):卷积神经网络CNN(进阶篇)_第12张图片

你可能感兴趣的:(pytorch)