前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pytorch-ResNet(残差网络)-上

Pytorch-ResNet(残差网络)-上

作者头像
用户6719124
发布2019-12-04 11:48:07
8620
发布2019-12-04 11:48:07
举报

由之前的研究,会有人疑问是否往往更深层次的神经网络具有更佳的表现?这种问题现在还无法进行完美的解答。

但在尝试进行更深层次的神经网络时,网络性能不一定会得到显著的提升,反而训练和测试的性能有时会下降。这是由于网络结构变深,每一层的求导结果是要参考上一层的结果,因此层层累计的误差会随着层数的增多而急剧增大,进而造成更严重的梯度离散和梯度爆炸的现象。

因此我们希望更多层数的神经网络至少不差于低层次的神经网络结构。

如上图所示,我们新创建的30layers的网络结构在性能上最起码不要差于22层的googlenet。因此我们考虑在22层结束末尾添加一个short cut(捷径),这里对loss的求导为1,因此若此时的训练效果不好,神经网络则会直接跨过后面的8层。若结果尚可,则会进行30层的学习。因此short cut的建立可以保障即便训练效果再差,也会优于22层的网络结构。

注意这里的short cut不是每一层都加,而是每隔数层之后再加。

如上图所示,ResNet是由一个个类似于上面的小单元堆叠而成。

正常情况下单元的构成包括有:(conv)卷积层+batch norm+pooling+ReLU,而ResNet的构成可能大部分为conv+ReLU+conv+ReLU层组成。

后人经过探索发现,小单元的构造最佳为2至3层的卷积层再加一个short cut较合适。

上图中,假设输入的是256,为能进行相加,因此输出的shape也必须为256。因此卷积的操作不能进行维度上的衰减。

这样每个小单元的参数量大概为256*256*3*3(kernel shape)≈600K左右。

为能进行更好的训练,这里可以对kernel的size进行减小,可以变为[64, 224, 224],后续进行padding操作后变为[64, 224, 224],再往后变为[256, 224,224]。此时总输出约为70K。数据量明显减小。

对比一下各个网络层的结构

上图中,VGG结构的空白部分代表了在ResNet中可替换的short cut层。

此时有的人会有疑问,若在每一层都加short cut,那么整个结构会不会退化成只有一层的结构。其实是否退化是由网络结构的训练过程决定的。

可以说,若果以后硬件性能变得更强,则ResNet与VGG可能会变成深度学习发展的中间产物,但可以确定的是暂时两者的使用还是很广的。

ResNet一经推出便取得了优异战果

在检测、定位、语义分割等多领域都取得较好效果。每一项的提升都很显著。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 python pytorch AI机器学习实践 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档