0
点赞
收藏
分享

微信扫一扫

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


文章目录

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

1、GoogleNet

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


如图是经典网络GoogleNet的网络结构图,如果将每层均用上篇内容的表示方法,则代码过于冗长。观察到网络结构中有很多重复部分,因此可以使用Class对重复部分进行封装。

2、重复部分封装

1.Concatenate

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


如图所示是GoogleNet中反复出现的网络结构,由于不清楚哪种网络结构的训练效果最好,因此分成多条支路分别进行训练,训练较好的支路的权重也会变大。Concatenate的作用就是将不同结果进行拼接。注:该拼接必须保证结果的长宽一致即W-H一致。

2.1*1卷积核

1.信息聚合

在上面的网络结构中,使用了多个1*1的卷积核,它的意义是信息的聚合。

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


上图中,使用了1*1卷积核之后,所获得的结果矩阵融合了三个通道的信息。例如,在考试科目中,计算总分进行比较,也是一种信息聚合。

2.简化计算

1*1卷积核另外一个作用是简化计算量。

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


如图的网络结构中,使用11卷积核之后,计算量减小到了原来的1/10,主要原因是11卷积核能够直接改变通道的数量。

3、程序书写

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


注意,由于要保证所有输出的长宽一致,因此要在部分卷积核中合理设置padding数值,padding数值怎么设,参考本专栏上一篇文章。

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


拼合结果如图所示,不同块的结果长宽一致,通道数可以不一致。

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


拼接使用torch.cat,dim=1代表沿着第二个维度拼接。维度是【b,c,w,h],第二个即为channel。整体代码:

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


程序中第二个卷积层输入通道为88,88由四个输出的拼接通道数相加获得。

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

1.梯度消失

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

2.残差网络 Residual Net

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


在残差网络中,将一层的输入相加到输出,那么求H(x)对x求导的结果始终大于1,就不会出现梯度消失。

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


在残差网络中,由于是输入要和输出相加,则必须满足输入的大小和输出的大小一致。图中的虚线部分,跨越的网络大小发生变化,因此需要对输入进行特殊处理,以保证大小一致。

3.程序表达

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


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


举报

相关推荐

0 条评论