首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >pytorch学习笔记(十):卷积神经网络CNN(进阶篇)

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

作者头像
zstar
发布2022-06-14 10:43:46
发布2022-06-14 10:43:46
2670
举报
文章被收录于专栏:往期博文往期博文

文章目录

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.程序表达

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1、GoogleNet
  • 2、重复部分封装
    • 1.Concatenate
    • 2.1*1卷积核
      • 1.信息聚合
      • 2.简化计算
  • 3、程序书写
  • 4、残差网络的引入——解决梯度消失的问题
    • 1.梯度消失
    • 2.残差网络 Residual Net
    • 3.程序表达
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档