当前位置: 首页 > article >正文

ResNet网络详解

 网络亮点:

超深的网络结构(突破1000层)

提出residual模块

使用Batch Normalization加速训练(丢弃dropout层)

对比:

通过简单的卷积层、最大池化下采样层堆叠网络,并不能达到层数越深效果越好;通过下图可以看出56层的效果远差于20层。 

 随着网络的加深会产生问题:

梯度消失或梯度爆炸:通过对数据进行标准化处理,BN处理等解决

退化问题(degradation problem):通过残差解决问题

提出的ResNet:

根据下图,实线代表验证集错误率,虚线代表训练集错误率;层数越深,训练效果越好,ResNet解决了退化问题,可以通过残差结构不断加深网络,以获得更好的结果。

34层网络结构图:

由一系列残差结构组成,最后通过一个平均池化下采样、全连接层得到最终输出

与表格相互对应 

残差结构:

conv2_x:无虚线结构

conv3_x:第一层使用了虚线残差结构

conv4_x

conv5_x

 平均池化下采样层及全连接层:

 与多层网络结构对比:

对于18层、34层网络结构,通过最大池化下采样后得到56*56*64的特征矩阵,而残差结构所需要的输入也刚好为56*56*64

对于50层、101层、152层网络结构,通过最大池化下采样后得到56*56*64的特征矩阵,而残差结构的输入需要56*56*256

Residual结构:

 给出两种不同的残差结构,左边更适合网络层数较少的网络(如ResNet34),而右边的结构更适合网络层数较多的网络(如ResNet50/101/152)

左解析:

实线部分: 

过程:

主线(左)将输入的特征矩阵通过两个3*3的卷积层,在右边有一条弧线(捷径分支)直接从输入连接到输出;在主分支上进行一系列操作得到的特征矩阵再与输入特征矩阵进行相加,最后通过ReLU激活函数

注意:

主分支与shortcut的输出特征矩阵shape(H、W、channel)必须相同,才可以保证在相同维度上做加法运算(而不是在深度上做拼接)

虚线部分:

第一个3*3的卷积的stride发生变化,因为需要把[56,56,64]变为[28,28,128],高宽变为原来的\frac{1}{2},stride=2

捷径分支加入了1*1的卷积核,采用stride=2,高宽变为原来的\frac{1}{2}

右解析: 

实线部分: 

过程:

主分支首先通过1*1卷积层,再通过3*3卷积层,再通过1*1卷积层,与左残差结构的区别是在输入和输出时都加入了“1*1卷积”

通过1*1卷积后,高和宽不变,但深度由256变为64,第一个1*1卷积层的作用是降维 

 通过1*1卷积后,高和宽不变,但深度由64变为256,第二个1*1卷积的作用是升维,这样才可以与输入特征矩阵进行相加。

参数变化:

左残差结构:

3*3*256*256+3*3*256*256=1179648

右残差结构:

1*1*256*64+3*3*64*64+1*1*64*256=69632

节省了很多参数

 虚线部分:

右侧虚线残差结构的主分支上,第一个1*1卷积层的步距=2,第二个3*3卷积层的步距=1

但在pytorch官方实现过程中,第一个1*1卷积层的步距=1,第二个3*3卷积层的步距=2,这样可以在ImageNet的top1上提升大概0.5%的准确率

Batch Normalization:

目的:

使一批(batch)feature map满足均值为0,方差为1的分布规律。

 过程:

 \mu   \sigma ^{2}在正向传播过程中统计得到

\gamma \, \, \, \, \beta在反向传播过程中训练得到

迁移学习:

优势:

能够快速的训练出一个理想结果

当数据集较小时也能训练出理想的效果

注意:

使用别人预训练模型参数时,要注意别人的预处理方式

常见的迁移学习的方式:

1.载入权重后训练所有参数

2.载入权重后只训练最后几层参数

3.载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层


http://www.kler.cn/a/392251.html

相关文章:

  • WPF学习之路,控件的只读、是否可以、是否可见属性控制
  • ubuntu20.04安装FLIR灰点相机BFS-PGE-16S2C-CS的ROS驱动
  • 【知识科普】SPA单页应用程序介绍
  • vue3+vite 前端打包不缓存配置
  • 华为数通HCIA系列第5次考试-【2024-46周-周一】
  • 字节跳动核心技术:TT推荐系统从0-1落地应用
  • 【Spring】@Autowired与@Resource的区别
  • 常用环境部署(二十三)——Docker部署ERPNext
  • C++学习笔记----11、模块、头文件及各种主题(一)---- 模板概览与类模板(8)
  • 深度学习-神经网络基础-激活函数与参数初始化(weight, bias)
  • [Linux]:IO多路转接之epoll
  • 鸿蒙next版开发:订阅应用事件(ArkTS)
  • EasyExcel 使用多线程按顺序导出数据
  • linux GPIO
  • 【Linux】进程状态与进程优先级
  • torch jit 动态获取buffer
  • upload-labs通关练习
  • 闲鱼监控助手货源获取技巧(轻松找到优质货源的方法)
  • 【大数据测试spark+kafka-详细教程(附带实例)】
  • Unity3D设置3D物体不超出相机视角范围(物体一直保持在相机视角范围内)
  • Android S长按文件或视频或编辑中文字或输入框中文字不会弹出分享菜单
  • 零基础入门转录组下游分析——预后模型之多因素cox模型
  • 小西作业1_third order plant(SPM)
  • Linux也有百度云喔~
  • 在Java中使用ModelMapper简化Shapefile属性转JavaBean实战
  • 信令服务器设计之websocket基础