ResNet 简介

ResNet

本文对resnet进行介绍,文章目录如下:

  • ResNet 历史
  • ResNet 亮点
  • 为何层数不能太深
  • residual 残差模块介绍
  • 网络结构
  • BN 层
  • 迁移学习

本文参考资料有:

  • 6.1 ResNet网络结构,BN以及迁移学习详解 https://www.bilibili.com/video/BV1T7411T7wa
  • ResNet原论文 https://arxiv.org/pdf/1512.03385.pdf
  • Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift https://arxiv.org/abs/1502.03167

ResNet 历史

ResNet在2015年由微软实验室提出,在2015 ImageNet中分类任务第一,目标检测第一,COCO数据集目标检测第一,图像分割第一。

原论文如下:

请添加图片描述

ResNet 亮点

亮点主要有三点:

  • ResNet采用了超深的网络结构,作者尝试了超过1000层的网络结构。
  • 提出了residual模块。 解决退化问题
  • 使用Batch Normalization加速训练,丢弃了dropout层。 解决梯度消失/梯度爆炸问题

为何层数不能太深

如果层数太深会引起梯度消失与梯度爆炸和退化问题。其中梯度消失指的是,假如你每次都乘以一个<1的数,由级数知识可知,最终结果会趋向于无穷,这个问题最终使用BN层消除了。还会引起退化问题,最终退化问题通过引入residual残差结构解决了。

请添加图片描述

residual 残差模块介绍

残差模块即特征矩阵相加,而对于深度更深的ResNet,作者通过使用1x1卷积核降维升维后,再进行特征矩阵的相加实现。两个特征矩阵要实现加法,需要保证两个特征矩阵的[channels, height, width]要相同。下图中,通过深度残差模块(右),我们能够明显地发现我们的网络所需要参数减少了。

请添加图片描述

网络结构

ResNet的模型结构见下表:

请添加图片描述

需要注意的是,每一个conv[n]_x(18,34浅层n>2,50,101,152深层n>1)的第一个层都是虚线,需要对输入特征矩阵的大小进行变换,使其不等于输出特征矩阵大小。如果是实线的残差结构,则输出特征矩阵和输入矩阵是一样的,而对于虚线的残差结构捷径部分也是经过卷积处理的,输出特征矩阵往往不等于输出特征矩阵,如下:

请添加图片描述

BN 层

BN是解决过拟合的一种方式,BN全称Batch Normalization,它的目的是使每一批数据(batch)的每一层的feature map满足均值为0,方差为1的分布规律,在增加BN层后,在该BN层的前一层的Conv2d的bias参数得为False。

BN是google团队2015年论文”Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift"中提出,原论文链接https://arxiv.org/abs/1502.03167,通过该方法能够加速网络的收敛并提升准确率。

请添加图片描述

请添加图片描述

我们对feature map输出特征矩阵的每一维度的数据求均值和方差,再通过标准化处理,缩放平移,得到最终的 y i y_i yi。缩放所使用的 β , γ \beta, \gamma β,γ是通过学习得到的。BN对于多维度的例子如下:

请添加图片描述

使用BN时需要注意以下三点:

  • 训练时要将training参数设置为True,验证时要将training参数设置为False,pytorch中可以通过model.train()和model.eval()实现。
  • batch_size要设置的尽量大,但是这个和硬件设备有关。
  • 建议将BN层放在卷积层和激活层之间,且在卷积层不要设置bias,bias设置了也没用。

BN总结:

请添加图片描述

迁移学习

迁移学习指的是使用别人训练好的模型参数再进行训练,他的优势在于:

  • 能够快速地训练出一个理想的结果。
  • 当数据集较小的时候也能够训练出理想的效果。

使用迁移学习需要保证模型的全部参数或者某一部分参数是相同的。在对新的数据集进行训练时,往往低纬度的特征是通用的,而高维度的特征才是我们需要学习的,所以我们可以采用迁移学习对具有相同部分的新的网络或者新的数据集的高维度特征进行学习。

请添加图片描述

常见的迁移学习的方式具有以下几种:

  • 载入权重后训练所有参数。(使用不同的数据集)// 效果最好
  • 载入权重后只训练最后几层参数。(即全连接层中,你的分类个数可能不同)
  • 载入权重后在原网络基础上再添加一层全连接层,仅训练最后一个全连接层。(改变网络模型)

使用迁移学习,我们需要注意两个网络得有相同部分或完全相同才能迁移学习;要注意别人的预处理方式,保持自己的预处理方式与别人的预处理方式相同。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ResNet-GRU是将ResNet和GRU两种神经网络结构进行结合的一种模型。ResNet是一种深度残差网络,通过引入跳跃连接和残差块来解决深层网络训练中的梯度消失和梯度爆炸问题。而GRU是一种门控递归单元,用于处理序列数据的建模,它通过更新门和重置门来控制信息的流动和遗忘。将ResNet和GRU结合起来,可以在处理序列数据时充分利用ResNet的残差学习能力和GRU的门控机制,从而提高模型的性能和泛化能力。具体而言,ResNet-GRU模型可以通过在ResNet的残差块中使用GRU单元来替代普通的卷积层或全连接层,从而实现对序列数据的建模和特征提取。这种结合可以使模型更好地捕捉序列数据中的长期依赖关系,并提高模型在序列任务上的表现。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [深度学习基础网络 ResNet](https://blog.csdn.net/weixin_30783629/article/details/98268807)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [模型CNN-RNN-LSTM和GRU简介](https://blog.csdn.net/qq_33932782/article/details/117198151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值