从传统CNN到残差网络:用PyTorch实现更强大的图像分类模型

在深度学习领域,卷积神经网络(CNN)凭借其强大的空间特征提取能力,已成为计算机视觉任务的核心工具。然而,随着网络深度的增加,传统的CNN往往会面临梯度消失/爆炸训练退化的问题——即使增加网络层数,模型的准确率也不升反降。2015年,何恺明团队提出的**残差网络(Residual Network, ResNet)**通过引入“跳跃连接”(Skip Connection),解决了这一难题,使深度神经网络的训练变得可行。本文带你理解残差网络的核心思想,并基于PyTorch实现一个基础残差网络模型。

一、传统CNN的困境:为什么需要残差网络?

在深入残差网络前,我们先回顾用户提供的传统CNN模型结构:

class CNN(nn.Module):
    def __init__(self):
        super().__init__()
        self.conv1 = nn.Sequential(...)  # 3→8→8
        self.conv2 = nn.Sequential(...)  # 8→16→32→32
        self.conv3 = nn.Sequential(...)  # 32→16→32→32
        self.conv4 = nn.Sequential(...)  # 32→256→256
        self.out = nn.Linear(256*32*32, 20)  # 全连接输出

这个模型通过多层卷积和池化逐步提取特征,最终通过全连接层分类。但当网络层数增加时(例如超过30层),会出现两个关键问题:

1. 梯度消失/爆炸

深层网络的反向传播需要逐层传递梯度。由于激活函数(如ReLU)的非线性特性和权重初始化的随机性,梯度在反向传播中可能会指数级衰减(消失)或增长(爆炸),导致深层参数无法有效更新。

2. 训练退化

实验表明,增加网络层数后,模型的训练误差反而上升(而非下降)。这说明深层网络的优化难度远高于浅层网络,并非是由于过拟合。

二、残差网络的核心思想

残差网络的解决方案是引入跳跃连接,让网络直接学习输入与输出的“残差”(Residual),而非直接学习目标映射。

残差块(Residual Block):残差网络的基本单元

残差网络的核心是残差块。对于一个残差块,输入 xxx 经过若干卷积层(记为 f(x)\mathcal{f}(x)f(x))后,与原始输入 xxx 相加(跳跃连接),得到最终输出 y=f(x)+xy = \mathcal{f}(x) + xy=f(x)+x

两种残差块形式

根据输入和输出的维度是否一致,残差块分为两种:

  1. 基本块(Basic Block):适用于浅层残差网络(如ResNet-18/34),由两个3×3卷积层堆叠而成。
  2. 瓶颈块(Bottleneck Block):适用于深层残差网络(如ResNet-50/101/152),通过1×1卷积降维、3×3卷积提取特征、1×1卷积升维,减少计算量。

跳跃连接的作用

  • 缓解梯度消失:跳跃连接的加法操作允许梯度直接反向传播(跳跃连接让梯度在反向传播时,能不经过中间层直接从后层传到前层,减少了逐层传递的衰减)。
  • 允许更深的网络:即使中间层的参数失效(如权重全为0),跳跃连接仍能保证输出为 xxx,避免训练退化。

残差网络基本结构图:

在这里插入图片描述

三,残差网络实现

现在,我们使用mnist手写数字集完成一个基础的残差网络。

步骤1:定义残差块(Basic Block)

首先,我们需要定义一个残差块类,包含两个3×3卷积层和:

import torch.nn as nn

class ResidualBlock(nn.Module):
    def __init__(self, in_channels, out_channels, stride=1):
        super().__init__()
        # 主路径:两个3x3卷积层
        self.main_path = nn.Sequential
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值