文章目录
一段话总结
本章围绕卷积神经网络(CNN)展开全面讲解,核心介绍了CNN解决图像处理高参数、丢失空间信息的核心优势,其具备局部区域连接 和权值共享 特点,由输入层、卷积层、池化层、全连接层和Softmax层构成,还讲解了PyTorch中torch.nn 模块的两大核心组件nn.Module 和nn.functional 的区别与使用原则;深入阐述卷积核、单/多通道卷积、步长、填充等卷积核心概念,给出特征图尺寸计算公式,讲解深度可分离卷积的逐通道、逐点卷积构成;介绍PyTorch中卷积层、批量标准化、激活函数、池化层、线性层的实现函数与使用方法;分析AlexNet、VGG16、GoogleNet、ResNet等经典CNN架构特点,重点讲解残差、倒残差结构及MobileNet V2网络架构,并提供MobileNet V2和自定义简单CNN模型的搭建实例,同时提及torch.utils.data下Dataset、DataLoader的数据集构建与加载方法。
思维导图

详细总结
一、卷积神经网络概述
-
CNN的核心优势 :解决传统图像处理参数量大 (如2242243图像输入参数达150528个)、扁平化丢失空间信息的问题,实现参数降维,保留图像特征,可识别翻转、旋转等变换后的图像。
-
核心特点 :局部区域连接 、权值共享。
-
一般构成:输入层→卷积层→池化层→全连接层→Softmax层,最终输出分类结果。
-
神经网络核心组件
-
层:基本结构,实现输入张量到输出张量的转换;
-
模型:由多层链接而成,将输入转换为预测值;
-
损失函数:对比预测值与真实值,输出损失值衡量匹配度;
-
优化器:利用损失值更新权重,使损失值降低,达到阈值/指定次数后停止。
-
-
torch.nn模块(PyTorch核心库)
| 模块 | 形式 | 示例 | 使用原则 |
|---|---|---|---|
| nn.Module | 类(首字母大写) | nn.Conv2d、nn.MaxPool2d | 带可学习参数的层使用 |
| nn.functional | 函数(全小写) | nn.functional.conv2d、nn.functional.linear | 无可学习参数的层使用 |
- nn.Sequential:将多个层包装为一个大层,适用于简单序列模型;复杂模型需继承nn.Module并实现forward方法,可学习参数层放__init__,无参数层可放forward。
二、卷积核心概念与运算
-
卷积核 :大小为m×n的可学习滤波器,矩阵元素为权重 w i j w_{ij} wij ,核心作用是提取输入数据的局部特征(边缘、纹理、角落等)。
-
图像卷积运算
-
单通道卷积:卷积核在图像/特征图上滑动,对应位置相乘求和得到新特征值;
-
多通道卷积:卷积核通道数与输入一致,先逐通道做单通道卷积,再将特征图对应位置相加,最终输出1个特征图。
-
-
关键参数
-
步长(Stride) :卷积核每次滑动的行列数,可成倍缩小输入尺寸,步长为 n n n 则尺寸缩小为原来的 1 / n 1/n 1/n ;
-
填充(Padding):在输入矩阵边缘补0,减少边缘像素信息丢失,提升特征提取完整性。
-
-
特征图尺寸计算公式 :设输入尺寸 n × n n×n n×n ,卷积核 k × k k×k k×k ,步长 s s s ,填充个数 p p p ,则输出尺寸=(n+2p-k)/s +1。
-
深度可分离卷积(DSC) :由**逐通道卷积(DW)和逐点卷积(PW)**组成,参数量远低于常规卷积,运算成本低。
-
逐通道卷积:输入 n n n 通道对应 n n n 个1通道卷积核,输出 n n n 个特征图,如3×3卷积核处理3通道图像,参数量为 3 × 3 × 1 × 3 = 27 3×3×1×3=27 3×3×1×3=27 ;
-
逐点卷积:卷积核固定为 1 × 1 × C 1×1×C 1×1×C (C为输入通道数),卷积核个数=输出通道数,与常规卷积逻辑一致。
-
三、卷积层、批量标准化、激活函数
-
卷积层
-
常规二维卷积 :通过
torch.nn.Conv2d()实现,核心参数包括in_channels(输入通道)、out_channels(输出通道/卷积核数)、kernel_size(卷积核尺寸)、stride(步长)、padding(填充)、groups(分组,groups=in_channels为逐通道卷积)等; -
深度可分离卷积 :PyTorch无专用函数,通过
nn.Conv2d组合实现,DW设groups=输入通道数,PW设kernel_size=1。
-
-
批量标准化(BN)
-
作用:降低内部协变量变化,加快模型训练速度,提升性能和稳定性;
-
实现:
nn.BatchNorm2d(),核心参数num_features(输入通道数)、eps(稳定系数,防分母为0)、momentum(均值/方差更新参数)、affine(是否学习gamma/beta)。
-
-
激活函数 :为网络提供非线性建模能力,常用类型及PyTorch实现如下:
| 激活函数 | 输出范围 | PyTorch实现 | 特点 |
|---|---|---|---|
| Sigmoid | (0,1) | nn.Sigmoid() | 适合二分类,易梯度消失 |
| Tanh | (-1,1) | nn.Tanh() | 零均值输出,仍易梯度消失 |
| ReLU | [0,+∞) | nn.ReLU() | 解决梯度消失,计算高效 |
| ReLU6 | [0,6] | nn.ReLU6() | 限制最大输出,适配移动端 |
| Softmax | (0,1) | nn.Softmax(dim) | 多分类,输出各类概率,dim指定计算维度 |
四、池化层、线性层
- 池化层 :非线性操作,核心功能为减小特征尺寸、提高运算速度、减小噪声影响,包含4种类型,PyTorch实现及特点如下:
| 池化类型 | PyTorch实现 | 核心特点 |
|---|---|---|
| 最大值池化 | nn.MaxPool2d() | 提取局部最大值,保留纹理特征 |
| 均值池化 | nn.AvgPool2d() | 提取局部均值,保留整体特征 |
| 全局最大池化 | nn.AdaptiveMaxPool2d() | 池化窗口=输入尺寸,输出全局最大值 |
| 全局均值池化 | nn.AdaptiveAvgPool2d() | 池化窗口=输入尺寸,输出全局均值 |
-
线性层(全连接层)
-
原理:每个神经元与上一层所有神经元相连,实现前一层线性组合;
-
实现:
torch.nn.Linear(in_features, out_features, bias=True),参数in_features(输入样本大小)、out_features(输出样本大小)、bias(是否添加偏差)。
-
五、常见卷积神经网络及搭建实例
- 经典CNN架构特点
| 架构 | 核心结构 | 关键特点 |
|---|---|---|
| AlexNet | 8层(5卷积+3全连接) | 比LeNet更深,用ReLU替代Sigmoid,Data Augmentation+Dropout抑制过拟合 |
| VGG16 | 5组卷积+5池化+3全连接 | 用3×3小卷积核 替代大卷积核、2×2小池化核,网络更深更宽,扩充通道数降尺寸 |
| GoogleNet | Inception模块化结构 | 多尺度卷积核提取特征,平均池化替代全连接层,保留Dropout抑制过拟合 |
| ResNet | 残差结构(BasicBlock/Bottleneck) | 隔层相连(shortcut)解决梯度消失/爆炸 和网络退化,BatchNorm辅助优化 |
-
特殊结构
-
残差结构:分BasicBlock(2个3×3卷积)和Bottleneck(1×1降维+3×3卷积+1×1升维),通过shortcut实现特征矩阵隔层相加,降低深层网络退化;
-
倒残差结构 :MobileNetV2提出,流程为扩张-卷积-压缩 (与残差的"压缩-卷积-扩张"相反),高维特征经ReLU激活信息丢失少,末层用线性瓶颈替代ReLU,避免低维特征信息丢失。
-
-
MobileNet V2
-
亮点:倒残差结构 +线性瓶颈,适配移动端,参数量少、运算效率高;
-
结构:1个常规卷积+17个倒残差模块+1个1×1卷积+1个全连接层;
-
实现:基于nn.Module构建倒残差类InvertedResidual,再组合为MobileNetV2主类,配置扩展率、输出通道、循环次数、步长等参数。
-
-
自定义简单CNN模型:整合卷积(Conv2d)、批量标准化(BatchNorm2d)、激活函数(ReLU)、池化(MaxPool2d)、Dropout(随机失活)、线性层(Linear),继承nn.Module实现__init__和forward方法,完成特征提取到分类的端到端流程。
六、数据集相关(本章小结补充)
-
核心类:
torch.utils.data下的Dataset (自定义数据集需重写__len__和__getitem__方法)、DataLoader(实现数据集的分批加载); -
图片数据集构造方法:ImageFolder (按文件夹结构构造)、地址列表构造(通过图像地址列表加载)。
关键问题
问题1:PyTorch中nn.Module和nn.functional的核心区别是什么?搭建网络时的使用原则是什么?
答案 :核心区别在于存在形式和参数管理,nn.Module是类 (首字母大写),层的参数由框架自动管理;nn.functional是函数 (全小写),无自动参数管理能力。使用原则为:带可学习参数 的层(如Conv2d、Linear)使用nn.Module;无可学习参数的层(如ReLU、MaxPool2d)可使用nn.functional或nn.Module均可。
问题2:深度可分离卷积与常规卷积相比为何参数量更低?其由哪两部分组成,各有什么特点?
答案 :常规卷积的参数量为卷积核宽×高×输入通道数×输出通道数,而深度可分离卷积将卷积拆分为逐通道卷积(DW)和逐点卷积(PW),分步计算大幅减少参数量。其两部分特点:①逐通道卷积(DW):输入n通道对应n个1通道卷积核,仅对单通道独立卷积,不改变通道数,参数量极少;②逐点卷积(PW):用1×1的卷积核,实现通道数的变换,卷积核个数等于输出通道数,仅做通道维度的线性组合。
问题3:ResNet的残差结构解决了什么问题?MobileNetV2的倒残差结构对残差结构做了哪些改进,为何更适配移动端?
答案 :①ResNet的残差结构通过shortcut隔层连接 ,解决了深层神经网络的梯度消失/爆炸 和网络退化 问题,让网络深度增加时性能不下降反而提升;②MobileNetV2的倒残差结构将残差的"压缩-卷积-扩张"流程改为扩张-卷积-压缩 ,先升维得到高维特征,经ReLU激活后信息丢失更少,且末层用线性瓶颈 替代ReLU,避免低维特征信息丢失;同时倒残差结构基于深度可分离卷积构建,参数量少、运算成本低,更适配移动端的算力和内存限制。