作者简介:秃头小苏,致力于用最浅显的语言描绘问题

往期回忆:根据pytorch建立VGGNet神经网络用于花类辨认    根据pytorch建立AlexNet神经网络用于花类辨认

近期方针:拥有5000粉丝

支撑小苏:点赞、收藏⭐、留言

根据pytorch建立ResNet神经网络用于花类辨认

写在前面

  这一系列现已写了好几篇了,这篇完毕后或许就会停更一系列了,由于一方面,看懂了现已更新的这些我以为其他的网络大约就是照葫芦画瓢,自己多多少少是能看明白个大约的。【当然这是要在你对这部分网络结构的理论有充沛的了解之后】另一方面,我觉得这部分真的得你自己切切实实的研究,自己一步步的调试,看他人的文章、乃至是视频,你或许会得到时间短的满意,可是许多细节你是体验不到的。所以这儿给出根据pytorch建立ResNet神经网络用于花类辨认的完整代码,希望咱们下去后仔细阅读

  至于这一系列再次更新的话不出意外会讲讲一些轻量级网络像MobileNet、shuffleNet等,当然了这部分都现已做过理论部分的概述了

仍是回归到本文上来,首要你需求具备以下常识

  • ResNet的理论
  • pytorch建立网络根底

当然,这些我在前文都现已介绍过,咱们抱着缺啥补啥的态度去看看呗

  • 深度学习经典网络模型汇总
  • 运用pytorch自己构建网络模型实战
  • 根据pytorch建立AlexNet神经网络用于花类辨认
  • 根据pytorch建立VGGNet神经网络用于花类辨认

ResNet网络模型建立✨✨✨

  自己写文章的主旨是致力于用最浅显的语言描绘问题嘛可是关于一些关乎于代码的文章,有的时分单纯的文字的确很难将问题表述清楚,因此我建议你先观看此视频,对ResNet网络模型建立的整理流程有了一个大致的了解后再来阅读此文,然后再以这篇文章为辅进行学习,这样我觉得是高效的学习方法【当然这样仍是不够的,你一定要自己去独立的阅读代码,一步步的调试运行,这一点我想我再着重也不为过】

  ResNeta网络是有很多重复的结构堆叠而成的,它的网络层数主要有18层、34层、50层、101层和152层。关于18层和34层的网络它的根底模块为basic block,而关于50层、101层和152层的网络其根底模块为bottleneck block。咱们能够分别来界说这两个根底模块,如下:

基于pytorch搭建ResNet神经网络用于花类识别

界说Bottleneck

基于pytorch搭建ResNet神经网络用于花类识别
注意:原论文中,在虚线残差结构的主分支上,第一个1×1卷积层的步距是2,第二个3×3卷积层步距是1。 但在pytorch官方完成过程中是第一个1×1卷积层的步距是1,第二个3×3卷积层步距是2, 这么做的好处是能够在top1上提高大约0.5%的准确率。 可参阅Resnet v1.5 ngc.nvidia.com/catalog/mod…

接着咱们就能够来界说咱们的ResNet网络了:

基于pytorch搭建ResNet神经网络用于花类识别
咱们能够看出再ResNet 的界说中有这样的函数:

基于pytorch搭建ResNet神经网络用于花类识别

  该函数表明对ResNet的每个根底模块一个整合,即layer1对应conv2_x、layer2对应conv3_x、layer3对应conv4_x、layer4对应conv5_x

基于pytorch搭建ResNet神经网络用于花类识别

_make_layer函数的界说如下:

基于pytorch搭建ResNet神经网络用于花类识别

最终咱们来看看如何界说一个具体的网络:

def resnet34(num_classes=1000, include_top=True):
    # https://download.pytorch.org/models/resnet34-333f7ec4.pth
    return ResNet(BasicBlock, [3, 4, 6, 3], num_classes=num_classes, include_top=include_top)
def resnet50(num_classes=1000, include_top=True):
    # https://download.pytorch.org/models/resnet50-19c8e357.pth
    return ResNet(Bottleneck, [3, 4, 6, 3], num_classes=num_classes, include_top=include_top)
def resnet101(num_classes=1000, include_top=True):
    # https://download.pytorch.org/models/resnet101-5d3b4d8f.pth
    return ResNet(Bottleneck, [3, 4, 23, 3], num_classes=num_classes, include_top=include_top)

练习结构展示

ResNet34练习成果:

基于pytorch搭建ResNet神经网络用于花类识别

ResNet50练习成果:

基于pytorch搭建ResNet神经网络用于花类识别

ResNet101练习成果:

基于pytorch搭建ResNet神经网络用于花类识别

迁移学习运用ResNet34预加载模型:

基于pytorch搭建ResNet神经网络用于花类识别

下面给出各种模型生成的权重文件,如下:

基于pytorch搭建ResNet神经网络用于花类识别

小结

  这一部分我感到有一些的奇怪,即上文用resnet训时,resnet101和resnet50的作用要比resnet34作用差,可是理论部分不是说resnet层数深作用越好嘛,这是什么原因呢?希望知道的能够告知。


  问了一些大佬,关于上述问题他们的解答是:这个和自己使命也有联系,简略的使命或许用小网络作用更好。

参阅视频:www.bilibili.com/video/BV14E…

如若文章对你有所协助,那就

咻咻咻咻~~duang~~点个赞呗