ResNet || 残差网络结构学习、Batch Normalization、迁移学习

本文详细介绍了ResNet网络的结构特点,包括其提出的残差模块和在解决深度网络退化问题上的作用。同时,深入探讨了BatchNormalization(BN)的概念,解释了BN如何加速网络训练并提升模型准确率,以及BN的实现过程和在训练时的注意事项。文章还提及迁移学习的优势,并提供了一个使用PyTorch搭建ResNet网络的教程链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1 介绍ResNet网络

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

       网络中的亮点
(1)超深的网络结构(突破1000层)
(2)提出residual模块
(3)使用 Batch Normalization加速训练(丢弃dropout)

在这里插入图片描述

  • 考虑到随着网络层数加深,会有:梯度消失(梯度爆炸)现象;退化问题(degradation problem) 但是ResNet可以解决这一问题!
    在这里插入图片描述

  • 这里左边的结构,用右边的结构代替了
    在这里插入图片描述

  • 实线的残差结构的shape前后是一致的,可以直接进行相加。

  • 注意,这里的stride变化了
    在这里插入图片描述

2 介绍 Batch Normalization

  • BN 是2015年提出来的,通过BN 可以加速网络收敛,提升准确率~
  • 使得每一个feature map,也就是每一个维度(channel),满足均值为0,方差为1的分布规律。
    在这里插入图片描述

2.1 什么是feature map

在CNN中,数据格式是 b*c*w*h 的,可以看做是c个二维图片堆叠在一起,每一个都是一个feature map

  • 比如说,红色、绿色和蓝色就分别是3个feature map
    在这里插入图片描述

  • 卷积之后的feature map
    层与曾之间会有若干个卷积核(kernel)(也是过滤器),比如说最常用的 3×3, 64, 表示有 64个 3×3大小的卷积核。
    有N个卷积核,那么下层就会产生N个feature map

2.2 BN 的过程

  1. 首先是对数据进行预处理(preprocessing), 调整到满足某一分布规律,这样就能加速了。
  2. 但是在conv1 之后,每一个feature map就不满足刚刚的分布规律了,此时就用用到 Batch Normalization 来使得每一个feature map 满足均值为0 方差为1

在这里插入图片描述

2.3 解读论文:Normalization via Mini-Batch Statistics

在这里插入图片描述
在这里插入图片描述

  • 论文给出了标准化处理的公式:
    在这里插入图片描述
  • 举个例子:
    在这里插入图片描述

2.4 使用BN时需要注意的问题

  1. 训练时:training=True , 在验证时training=False 在pytorch 中可以在 model.train()model.eval() 方法控制。
  2. batch size 需要尽量大一点,设置太小表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差
  3. 建议将BN层,放在卷积层和激活层之间,且卷积层不要设置偏置bias,因为没有用。

在这里插入图片描述

3 迁移学习

优势:
(1)能够快速的训练处一个理想的结果
(2)当数据集较小时也能训练处理想的效果

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

在这里插入图片描述


  • 下一篇文章讲的是,如何使用pytorch搭建ResNet网络~~有兴趣的小伙伴可以点击下方链接!

https://blog.youkuaiyun.com/weixin_42521185/article/details/124542423


  • 最后再次感谢b站up主的分享!为你投币点赞转发,做你的野生代言人~~
    在这里插入图片描述

https://www.bilibili.com/video/BV14E411H7Uw/?spm_id_from=pageDriver

### 使用 Batch Normalization 加速 Residual Network (ResNet) 训练的方法原理 #### 3.1 批标准化的作用机制 批标准化(Batch Normalization, BN)是一种用于加速深层神经网络训练的技术。BN通过减少内部协变量偏移来稳定加快训练过程,使得每一层输入分布更加稳定[^1]。 具体来说,在前向传播过程中,对于每一个小批量数据(batch),BN计算该批次内各特征维度上的均值方差,并据此对该批次的数据进行规范化处理: \[ \hat{x}^{(k)} = \frac{x^{(k)} - E[x^{(k)}]}{\sqrt{Var[x^{(k)}]+\epsilon}} \] 其中 \(x^{(k)}\) 表示第 k 维特征;\(E[\cdot]\), \(Var[\cdot]\) 分别表示期望方差运算符;\(\epsilon\) 是为了数值稳定性加入的小常数项。接着会对这些经过归一化的值乘上缩放因子 γ 并加上平移参数 β 来恢复原始尺度范围内的表达能力: \[ y^{(k)}=\gamma ^{(k)}\hat {x}^{(k)}+\beta ^{(k)} \] 这样做的好处是可以让激活函数在整个训练期间保持活跃状态,从而提高梯度下降效率并防止梯度消失现象的发生[^4]。 #### 3.2 在残差网络中的应用 在 ResNet 中引入 BN 层后,不仅能够有效缓解由于层数加深带来的优化困难问题,还进一步增强了模型的表现力。这是因为每经过一次卷积操作后的非线性变换都会紧跟着一个 BN 单元,这有助于维持信号传递路径的一致性连续性,进而促进信息流顺畅传输至更深层次的单元中去[^2]。 此外,得益于 BN 对权重初始化敏感性的降低作用,即使是在构建极其复杂的超深架构时也不必担心因不当设置初始权值而导致收敛失败的风险。因此可以说,正是有了像 BN 这样优秀的正则化手段作为支撑,才使得诸如 ResNet 等现代 CNN 架构得以实现其卓越性能[^3]。 ```python import torch.nn as nn class BasicBlock(nn.Module): expansion = 1 def __init__(self, inplanes, planes, stride=1, downsample=None): super(BasicBlock, self).__init__() # Convolution layer followed by batch normalization and ReLU activation self.conv1 = conv3x3(inplanes, planes, stride) self.bn1 = nn.BatchNorm2d(planes) ... def forward(self, x): identity = x out = self.conv1(x) out = self.bn1(out) # Apply batch normalization after convolution out = self.relu(out) ... return out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值