深度学习笔记--CNN卷积网络 + CNN自编码器
深度学习视觉基础学习笔记:CNN卷积网络 + CNN自编码器
前言
本周基于两层神经网络、反向传播、梯度校验等前置知识,系统学习两大基础视觉模型:CNN有监督图像分类网络、CNN-Based AutoEncoder无监督自编码器。
第一部分 CNN卷积神经网络理论详解
一、CNN诞生背景(为什么不用全连接网络)
之前两层全连接网络处理图像时,会把二维图片直接拉成一维向量,完全丢失图片空间位置、局部纹理、边缘关联信息,模型泛化差、极易过拟合。
CNN引入卷积操作,保留图像二维空间结构,只提取局部特征,参数量更少、泛化能力更强,是所有计算机视觉网络底层基础。
二、CNN全部基础模块详细原理
1. 卷积层 Conv2d(核心特征提取模块)
- 核心作用:使用固定尺寸卷积核滑动遍历整张图像,提取局部特征。浅层卷积提取边缘、线条;深层卷积提取轮廓、整体形状。
- 关键参数:
in_channels:输入通道,灰度图=1,RGB彩色图=3;out_channels:输出特征图数量,代表提取多少类不同特征;kernel_size:卷积核尺寸,常用3×3,小核轻量化、效果好;padding:边缘补0,padding=1可保证卷积后图片长宽不变,避免丢失边缘像素特征;stride:滑动步长,步长越大输出尺寸越小。
- 输出尺寸计算公式:
Output=Input−Kernel+2×PaddingStride+1Output=\frac{Input - Kernel + 2\times Padding}{Stride}+1Output=StrideInput−Kernel+2×Padding+1
2. 池化层 MaxPool2d(下采样压缩)
- 作用:缩小特征图长宽,减少参数量、降低计算开销,保留区域内最显著特征,抑制过拟合。
- 最大池化原理:取窗口内像素最大值,保留纹理、轮廓关键信息;无可训练权重,仅做数据压缩。
- 实操规律:池化stride=2,图片长宽直接缩小一半。
3. ReLU激活函数(引入非线性)
公式:f(x)=max(0,x)f(x)=max(0,x)f(x)=max(0,x)
若网络无激活函数,多层卷积叠加等价于单层线性运算,无法拟合手写数字这类非线性数据。ReLU将负数置0,赋予网络非线性拟合能力,同时缓解深层梯度消失。
4. BN批量归一化 BatchNorm2d
每一层卷积输出数据分布会不断偏移,导致训练收敛慢。BN对特征标准化,统一数据分布,大幅加快模型收敛速度,降低学习率调参难度。
标准堆叠顺序:Conv → BN → ReLU。
5. ResNet残差基础概念(拓展知识点)
单纯堆叠多层卷积会出现网络退化:网络越深,精度反而下降、梯度消失。残差短路连接直接跨层传递原始特征,让网络只学习残差映射,支撑深层网络稳定训练,是后续U-Net、YOLO标配结构。
三、CNN完整训练逻辑(MNIST手写数字分类)
- 数据预处理:图像转为张量、像素归一化,划分训练集/测试集,批量打乱加载;
- 网络前向传播:卷积提取特征→池化压缩→展平→全连接输出10类数字预测值;
- 损失函数:交叉熵CrossEntropyLoss,计算预测类别与真实标签差距;
- 标准训练五步循环:梯度清零→前向传播计算预测→计算损失→反向传播求梯度→优化器更新卷积、全连接权重;
- 训练现象:10轮迭代后训练损失持续下降,测试准确率最高99.09%,卷积网络效果远优于纯全连接网络。
四、CNN实操问题汇总
- 代码结构错误:网络类内部写入模型初始化代码,执行时报类未定义;
- 维度报错:卷积通道、池化后特征尺寸计算错误,全连接输入维度不匹配;
- 绘图警告:Matplotlib无中文字体,图表中文显示方框乱码;
- 环境报错:Anaconda与PyTorch OpenMP库冲突,程序运行终止。
第二部分 CNN自编码器 AutoEncoder 完整理论
一、自编码器定位与核心特点
- 任务类型:无监督学习,不需要图像标签,仅使用原图作为监督信号;
- 搭建基础:完全基于CNN卷积、池化、上采样组件搭建;
- 核心目标:学习图像压缩与重建,两大落地任务:图像去噪、图像降维。
二、三大核心结构:编码器Encoder、隐向量Latent、解码器Decoder
1. 编码器 Encoder(压缩模块)
由卷积层+最大池化堆叠组成,持续缩小图像长宽、压缩通道数,将高维图像映射为极低维度的latent隐向量。
单张28×28灰度原图原始维度:28×28=784维,经过编码器压缩至32维隐向量,实现图像轻量化存储。
2. Latent隐向量(图像压缩特征)
隐向量是整张图片的抽象低维表征,存储图片核心轮廓、纹理信息,剔除冗余像素。
超参数规律:隐向量维度设置越小,压缩程度越高,但丢失细节越多,重建图像会模糊。
3. 解码器 Decoder(还原重建模块)
由上采样Upsample+卷积层堆叠,与编码器结构对称。上采样放大特征图尺寸,逐步恢复图像长宽;最后一层使用Sigmoid激活,将输出像素限制在0~1,和原图像素范围匹配。
三、损失函数:MSE均方误差
逐像素计算重建图像与原始干净图像的差值,模型训练目标是不断缩小MSE损失,让重建图片无限接近原图。
计算公式:Loss=1n∑i=1n(y^i−yi)2Loss=\frac{1}{n}\sum_{i=1}^n (\hat{y}_i-y_i)^2Loss=n1∑i=1n(y^i−yi)2
四、两大实操任务理论原理
任务1:图像去噪
训练阶段给干净手写数字添加高斯噪声,将带噪图片输入编码器,以原始无噪声图片为标签训练。
模型学习过滤随机噪声,仅保留数字核心特征,推理时输入任意带噪图像,即可输出清晰降噪图像。
任务2:图像降维重建
不添加噪声,直接输入原图压缩为低维隐向量,再通过解码器还原图像。
验证逻辑:极低维度隐向量仍可还原清晰数字,证明隐向量完整保存图像关键特征,可用于图像数据压缩、特征检索。
五、自编码器训练流程
- 数据集复用MNIST灰度图,简化预处理,不做标准化,方便添加噪声;
- 搭建对称编解码CNN结构,分开定义压缩、还原模块;
- 训练20轮,每轮输入噪声图片,以干净原图为优化目标;
- 训练完成后可视化三组对比图:原图、噪声图、降噪重建图;原图、降维重建图。
六、实操踩坑完整总结
- 解码器未加Sigmoid:输出像素超出0~1区间,重建图像发黑、发白,损失震荡不收敛;
- 上采样通道不匹配:解码器卷积输出通道与输入灰度图通道不一致,直接维度报错;
- GPU张量绘图:未将张量转移至CPU,绘图代码运行失败;
- 隐向量维度过小:图像细节丢失,重建结果模糊。
第三部分 CNN与AutoEncoder核心理论对比
| 网络 | 学习类型 | 是否需要标签 | 核心目标 | 核心结构 |
|---|---|---|---|---|
| CNN分类网络 | 有监督学习 | 需要类别标签 | 区分不同图像类别 | 卷积+池化+全连接,输出分类结果 |
| AutoEncoder自编码器 | 无监督学习 | 无需标签,只用原图 | 图像压缩、降噪重建 | 编码器压缩+解码器重建,输出还原图像 |
第四部分 本周整体知识收获
- 打通图像网络底层逻辑,理解卷积提取空间特征的优势,掌握卷积、池化、BN、激活全套算子原理;
- 分清有监督、无监督视觉模型差异,吃透自编码器编解码、隐向量完整理论;
- 熟练掌握深度学习标准训练流程,能独立处理环境冲突、维度、绘图等各类代码报错;
- 搭建浅层视觉网络完整知识框架,为下周U-Net分割、YOLO检测、RNN时序网络打好理论基础。
第五部分 当前现存问题 & 下周学习规划
现存学习问题
- 隐向量维度对图像重建效果的影响缺少定量调参对比实验,调参经验不足;
- 深层网络超参数学习率、卷积通道数调试经验欠缺。
下周学习计划
- U-Net:学习对称编解码、跳跃连接、上采样、语义分割原理,完成医学影像分割实验;
- YOLOv5/v8:掌握多尺度检测、锚框、检测损失、实时推理,完成自定义物体识别;
- RNN/LSTM/GRU:学习循环单元、门控机制,解决时序梯度消失,完成文本、时序预测;
- 整合本周CNN、自编码器全部代码、实验结果、笔记,整理完整学习文档。
更多推荐

所有评论(0)