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

Posted Z|Star

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytorch学习笔记:卷积神经网络CNN(进阶篇)相关的知识,希望对你有一定的参考价值。

1、GoogleNet

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

2、重复部分封装

1.Concatenate

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

2.1*1卷积核

1.信息聚合

在上面的网络结构中,使用了多个1*1的卷积核,它的意义是信息的聚合。
在这里插入图片描述
上图中,使用了1*1卷积核之后,所获得的结果矩阵融合了三个通道的信息。例如,在考试科目中,计算总分进行比较,也是一种信息聚合。

2.简化计算

1*1卷积核另外一个作用是简化计算量。
在这里插入图片描述
如图的网络结构中,使用11卷积核之后,计算量减小到了原来的1/10,主要原因是11卷积核能够直接改变通道的数量。

3、程序书写

在这里插入图片描述
注意,由于要保证所有输出的长宽一致,因此要在部分卷积核中合理设置padding数值,padding数值怎么设,参考本专栏上一篇文章。
在这里插入图片描述
拼合结果如图所示,不同块的结果长宽一致,通道数可以不一致。
在这里插入图片描述
拼接使用torch.cat,dim=1代表沿着第二个维度拼接。维度是【b,c,w,h],第二个即为channel。

整体代码:
在这里插入图片描述
程序中第二个卷积层输入通道为88,88由四个输出的拼接通道数相加获得。

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

1.梯度消失

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

2.残差网络 Residual Net

在这里插入图片描述
在残差网络中,将一层的输入相加到输出,那么求H(x)对x求导的结果始终大于1,就不会出现梯度消失。
在这里插入图片描述
在残差网络中,由于是输入要和输出相加,则必须满足输入的大小和输出的大小一致。图中的虚线部分,跨越的网络大小发生变化,因此需要对输入进行特殊处理,以保证大小一致。

3.程序表达

在这里插入图片描述
在这里插入图片描述

以上是关于pytorch学习笔记:卷积神经网络CNN(进阶篇)的主要内容,如果未能解决你的问题,请参考以下文章

三维几何学习从零开始网格上的深度学习-2:卷积网络CNN篇(Pytorch)

3. 使用PyTorch深度学习库训练第一个卷积神经网络CNN

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法

(机器学习深度学习常用库框架|Pytorch篇)第(待定)节:卷积神经网络CNN中一些经典网络结构写法

Pytorch实现卷积神经网络CNN

tensorflow学习笔记五:mnist实例--卷积神经网络(CNN)