• 看b站up主霹雳吧啦Wz视频,以及一些文章参考,所做笔计
  • 链接:
    • 6.1 ResNet网络结构,BN以及迁移学习详解_哔哩哔哩_bilibili
    • 深度学习之残差神经网络(ResNet) - 知乎 (zhihu.com)
    • (二十七)通俗易懂理解——Resnet残差网络 - 知乎 (zhihu.com)
    • 一文读懂残差网络ResNet - 知乎 (zhihu.com)
    • pytorch图像分类篇:6. ResNet网络结构详解与迁移学习简介_Fun'的博客-CSDN博客
  • ResNet网络结构

    • ResNet在2015年由微软实验室提出,战火当年ImageNet竞赛中分类任务第一名,目标检测第一名,图像分割第一名
    • ResNet网络简介

      • 一般来说,如果存在某个k层的网络f是当前最优的网络,那么可以构造一个更深层的网络,其最后几层仅是该网络f第k层输出的恒等映射,就可以取得与一致的结果;如果k还不是所谓“最佳层数”,那么更深的网络就可以取得更好的结果。总而言之,与浅层网络相比,更深的网络的表现不应该更差。并且,越深的网络提取的特征越抽象,越具有语义信息。
      • 但是在实际实验时发现,不仅是测试精度,而且在训练精度上,更深的(56层)神经网络也远不如浅一些的(20层)神经网络

      • 实验表明,当网络堆叠到一定深度时会出现两个问题:
        • 1、梯度消失或梯度爆炸

          • 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
          • 梯度爆炸:若每一层的误差梯度大于1,反向传播时,网路越深,梯度越来越大
        • 2、退化问题
          • 在解决了梯度消失、爆炸问题后,仍然存在深层网络的效果可能比浅层网络差的现象
      • ResNet能很好地解决这些问题,网络亮度包括
        • 超深的网络结构(突破1000层)
        • 提出residual模块
        • 使用Batch Normalization加速训练(丢弃dropout)
      • 使用ResNet后可以看出提升效果很明显

        • 对于梯度消失或梯度爆炸问题,通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。
        • 对于退化问题,提出了 residual结构(残差结构)来减轻退化问题
    • 残差残差网络是什么

      • 残差的思想都是去掉相同的主体部分,从而突出微小的变化
      • 残差网络依旧让非线形层满足 H(x,Wh),然后从输入直接引入一个短连接到非线形层的输出上,使得整个映射变为

        • 这就是残差网络的核心公式,换句话说,残差是网络搭建的一种操作,任何使用了这种操作的网络都可以称之为残差网络。
      • 如果深层网络的后面那些层是恒等映射,那么模型就退化为一个浅层网络,那现在要解决的就是学习恒等映射函数了。
      • 但直接让一些叠加层去拟合一个潜在的恒等映射函数H(x) = x会比较困难,而这可能就是深层网络难以训练的原因。
      • 但是如果把网络设计为H(x) = F(x) + x,就可以转换为学习一个残差函数F(x) = H(x) - x,采用一些非线性层,让它们去拟合,只要F(x)=0,就构成了一个恒等映射H(x) = x,这样拟合残差肯定更加容易。

        • 整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
      • 简单的例子
        • 例子:F是求和前网络映射,H是从输入到求和后的网络映射。
        • 比如把5映射到5.1,那么引入残差前是F'(5)=5.1,引入残差后是H(5)=5.1, H(5)=F(5)+5, F(5)=0.1。
        • 这里的F’和F都表示网络参数映射,引入残差后的映射对输出的变化更敏感。比如s输出从5.1变到5.2,映射F’的输出增加了1/51=2%,而对于残差结构输出从5.1到5.2,映射F是从0.1到0.2,增加了100%。
        • 明显后者输出变化对权重的调整作用更大,所以效果更好。
    • 残差网络的优越性

      • 如果增加的层被构建为同等函数,那么理论上,更深的模型的训练误差不应当大于浅层模型,但是出现的退化问题表面,求解器很难去利用多层网络拟合同等函数。但是,残差的表示形式使得多层网络近似起来要容易的多,如果同等函数可被优化近似,那么多层网络的权重就会简单地逼近0来实现同等映射,即F(x) = 0。实际情况中,同等映射函数可能不会那么好优化,但是对于残差学习,求解器根据输入的同等映射,也会更容易发现扰动,总之比直接学习一个同等映射函数要容易的多。
      • 普通的平原网络与深度残差网络的最大区别在于,深度残差网络有很多旁路的支线将输入直接连到后面的层,使得后面的层可以直接学习残差,这些支路就叫做shortcut。传统的卷积层或全连接层在信息传递时,或多或少会存在信息丢失、损耗等问题。ResNet 在某种程度上解决了这个问题,通过直接将输入信息绕道传到输出,保护信息的完整性,整个网络则只需要学习输入、输出差别的那一部分,简化学习目标和难度。
    • residual是什么

      • 为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。
      • 残差网络由许多隔层相连的神经元子模块组成,我们称之为 残差块 Residual block。单个残差块的结构如下图所示:

      • 图中红色部分称为 short cut 或者 skip connection(也称 捷径分支),直接建立a[l]和a[l+2]之间的隔层联系,其前向传播的计算步骤为:

      • 由多个残差块组成的神经网络就是残差网络

    • ResNet中的残差结构

      • 实际应用中,残差结构的 short cut 不一定是隔一层连接,也可以中间隔多层,ResNet所提出的残差网络中就是隔多层。
      • 跟VggNet类似,ResNet也有多个不同层的版本,而残差结构也有两种对应浅层和深层网络:

      • 左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck

      • 对于深层的 Bottleneck,1×1的卷积核起到降维和升维(特征矩阵深度)的作用,同时可以大大减少网络参数。

        • 注:CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
    • ResNet18层网络为例说明

      • 观察下图的 ResNet18层网络,可以发现有些残差块的 short cut 是实线的,而有些则是虚线的。
      • 这些虚线的 short cut 上通过1×1的卷积核进行了维度处理(特征矩阵在长宽方向降采样,深度方向调整成下一层残差结构所需要的channel)。

      • 下图是原论文给出的不同深度的ResNet网络结构配置,注意表中的残差结构给出了主分支上卷积核的大小与卷积核个数,表中 残差块×N 表示将该残差结构重复N次。

      • conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层残差结构都是虚线残差结构。因为这一系列残差结构的第一层都有调整输入特征矩阵shape的使命(将特征矩阵的高和宽缩减为原来的一半,将深度channel调整成下一层残差结构所需要的channel)
      • 需要注意的是,对于ResNet50/101/152,其实conv2_x所对应的一系列残差结构的第一层也是虚线残差结构,因为它需要调整输入特征矩阵的channel。
        • 根据表格可知通过3x3的max pool之后输出的特征矩阵shape应该是[56, 56, 64],但conv2_x所对应的一系列残差结构中的实线残差结构它们期望的输入特征矩阵shape是[56, 56, 256](因为这样才能保证输入输出特征矩阵shape相同,才能将捷径分支的输出与主分支的输出进行相加)。
        • 所以第一层残差结构需要将shape从[56, 56, 64] --> [56, 56, 256]。
        • 注意,这里只调整channel维度,高和宽不变(而conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层虚线残差结构不仅要调整channel还要将高和宽缩减为原来的一半)。
      • 下面是 ResNet 18/34 和 ResNet 50/101/152 具体的实线/虚线残差结构图:
        • ResNet 18/34

        • ResNet 50/101/152s

  • Batch Normalization

    • Batch Normalization详解以及pytorch实验_太阳花的小绿豆的博客-CSDN博客_batch normalization pytorch
  • 迁移学习

    • 迁移学习是一个比较大的领域,我们这里说的迁移学习是指神经网络训练中使用到的迁移学习。
    • 在迁移学习中,我们希望利用源任务(Source Task)学到的知识帮助学习目标任务 (Target Task)。例如,一个训练好的图像分类网络能够被用于另一个图像相关的任务。再比如,一个网络在仿真环境学习的知识可以被迁移到真实环境的网络。迁移学习一个典型的例子就是载入训练好VGG网络,这个大规模分类网络能将图像分到1000个类别,然后把这个网络用于另一个任务,如医学图像分类。
    • 为什么可以这么做呢?如下图所示,神经网络逐层提取图像的深层信息,这样,预训练网络就相当于一个特征提取器。

    • 使用迁移学习的优势:

      • 能够快速的训练出一个理想的结果
      • 当数据集较小时也能训练出理想的效果
      • 注意:使用别人预训练好的模型参数时,要注意别人的预处理方式
    • 常见的迁移学习方式

      • 载入权重后训练所有参数
      • 载入权重后只训练最后几层参数
      • 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层

ResNet网络结构,BN以及迁移学习详解相关推荐

  1. cnn卷积过程,通道数,《6.1 ResNet网络结构,BN以及迁移学习详解》

    6.1 ResNet网络结构,BN以及迁移学习详解_哔哩哔哩_bilibili CNN科普讲解:李宏毅讲解卷积神经网络(带字幕)_哔哩哔哩_bilibili 1.图像中的RGBpython rgb 图 ...

  2. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  3. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  4. C语言再学习 -- 详解C++/C 面试题 2

    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...

  5. 定时任务框架APScheduler学习详解

    定时任务框架APScheduler学习详解 APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动,例如项目中有一个定时统计程序,定时爬出网站的URL程序,定时检测钓鱼网站 ...

  6. 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解很多小的篇幅,方便阅读.大神博客传送门: ...

  7. 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  8. 各种音视频编解码学习详解之 编解码学习笔记(十三):容器

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

  9. 各种音视频编解码学习详解之 编解码学习笔记(八):Real系列

    最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...

最新文章

  1. pytorch利用多个GPU并行计算多gpu
  2. Java语言的关键字
  3. Ubuntu下Nginx/PHP/MYSQL开发环境的配置方法
  4. KindEditor ASP.NET 上传/浏览服务器 附源码
  5. 【组合数学】组合存在性定理 ( 三个组合存在性定理 | 有限偏序集分解定理 | Ramsey 定理 | 相异代表系存在定理 | Ramsey 定理内容概要 )
  6. elementui table 不显示表头_不懂就问 || 单晶XRD第二期课后答疑出炉啦!!
  7. libxml2如何解析xml格式的字符串
  8. Fedora15安装NVIDIA显卡驱动全过程
  9. LeetCode14 Longest Common Prefix
  10. silk 编解码_Silk编解码在android实现
  11. 观察者模式,从公众号群发说起
  12. 【lucene】Lucene的lukeall工具
  13. ConcurrentHashMap 底层原理,你真的理解了吗?
  14. Linux rhel7 下MySQL5.7.18详细安装文档
  15. 【Django 2021年最新版教程4】为项目添加资源文件(css,js,image)
  16. 好教程推荐系列:《计算机视觉--算法与应用》和《机器视觉算法与应用》等等
  17. Matlab画图命令介绍
  18. vbs实现微信自动发送消息功能
  19. php脉聊交友源码_脉聊源码-PHP脉聊交友网站源码(附app源码)下载-西西软件下载...
  20. JAVA练习 家庭记账本

热门文章

  1. 未来 消费品企业 会员营销5大趋势
  2. python randint函数边界_Python random模块sample、randint、shuffle、choice随机函数
  3. 一个不好的软件设计案例
  4. MySQL 8新特性--InnoDB相关新特性
  5. linux新磁盘初始化,怎么初始化你的 Linux 新磁盘?
  6. 多服务模式的网约车需求预测
  7. 利用HappyPack优化webpack打包速度
  8. php switch语法
  9. Nodejs + express 开发微信公众号模板消息推送功能
  10. 【opencv学习之四十六】OpenCV4.2 QR二维码识别及定位