ResNet与ResNeXt

一、ResNet

论文:Deep Residual Learning for Image Recognition

ResNet网络中的亮点:

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

论文中提到,简单的堆叠卷积层与池化层并不能降低错误率,通过堆叠卷积层与池化层,会带来梯度消失或梯度爆炸、退化问题。

 ResNet不同的网络结构的错误率如下所示:

 网络中残差结构如下所示:

 主分支与shortcut的输出特征矩阵shape必须相同。

不同层数的ResNet网络结构对比如下:

### ResNetResNeXt的比较及其在深度学习中的应用 #### 背景介绍 残差网络(Residual Networks, ResNet)是一种通过引入跳跃连接来解决深层神经网络梯度消失问题的方法[^1]。它允许信息绕过某些层传递,从而使得训练更深的网络成为可能。而ResNeXt则是在ResNet的基础上进一步改进的一种架构设计。 #### 结构上的主要区别 ResNet的核心思想在于其提出的“恒等映射”机制,即让每一层输入不仅经过一系列变换后再输出到下一层,同时也直接加回到该系列变换后的结果之上形成最终输出。这种结构可以表示为 \( F(x) + x \),其中\( F(x) \)代表的是标准前向传播路径所执行的操作序列[^2]。 相比之下,ResNeXt提出了所谓的“聚合转换”(aggregated transformations)概念,在每一个residual block内部增加了一个新的维度——cardinality(基数),这指的是并行分支的数量。具体来说,每个block不再仅由单一类型的卷积组成,而是分成多个小组(grouped convolutions),每组独立处理一部分通道数的数据流之后再合并起来作为整个block的输出[^3]。 #### 使用场景分析 当面对需要更高精度的任务时,通常会选择使用更复杂的模型如ResNeXt而不是简单的加深宽度扩展版本的标准ResNet。这是因为虽然增大单个filter size或者stack更多layers能够提升表现力,但是这样做往往伴随着参数数量急剧上升以及潜在优化困难等问题;而采用group convolution方式构建出来的ResNeXts可以在保持较低计算成本的同时获得更好的泛化性能[^4]。 另外值得注意的一点是GPU资源的重要性。由于现代深度学习框架普遍支持CUDA加速运算,并且大部分预训练权重也是基于NVIDIA硬件平台发布出来供下载使用的因此如果计划实施涉及大规模图像分类或者其他计算机视觉相关项目的话,则强烈建议配备适当规格级别的图形处理器来进行高效实验迭代过程[^5]。 ```python import torch.nn as nn class BasicBlock(nn.Module): expansion = 1 def __init__(self, inplanes, planes, stride=1, downsample=None, groups=1, base_width=64): super(BasicBlock, self).__init__() norm_layer = nn.BatchNorm2d if groups != 1 or base_width != 64: raise ValueError('BasicBlock only supports groups=1 and base_width=64') self.conv1 = conv3x3(inplanes, planes, stride) self.bn1 = norm_layer(planes) self.relu = nn.ReLU(inplace=True) self.conv2 = conv3x3(planes, planes) self.bn2 = norm_layer(planes) self.downsample = downsample self.stride = stride def forward(self, x): identity = x out = self.conv1(x) out = self.bn1(out) out = self.relu(out) out = self.conv2(out) out = self.bn2(out) if self.downsample is not None: identity = self.downsample(x) out += identity out = self.relu(out) return out def _make_layer(block, planes, blocks, stride=1, dilate=False, groups=1, width_per_group=64): ... # Example instantiation of a basic residual block without cardinality adjustment. basic_block_instance = BasicBlock(64, 64) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值