《深度学习实战》第2集:卷积神经网络(CNN)与图像分类
《深度学习实战》第2集:卷积神经网络(CNN)与图像分类
引言
卷积神经网络(Convolutional Neural Network, CNN)是深度学习在计算机视觉领域的核心工具。从早期的 LeNet 到现代的 ResNet 和 Vision Transformer,CNN 的发展推动了图像分类、目标检测和语义分割等任务的突破。在本集中,我们将深入探讨 CNN 的基本原理,回顾经典架构的发展历程,并通过实战项目使用 ResNet 实现 CIFAR-10 图像分类任务。最后,我们还将探讨大模型中的视觉架构,如 Vision Transformer (ViT),展望未来的技术趋势。

一、卷积神经网络的基本原理
1.1 卷积层
卷积层是 CNN 的核心组件,负责提取图像的空间特征。卷积操作通过对输入图像应用滤波器(Filter),生成特征图(Feature Map)。
- 作用:捕捉局部特征(如边缘、纹理)。
- 公式:

卷积层示意图:
图 1: 卷积操作示意图

1.2 池化层
池化层用于降维,减少计算量并增强模型的鲁棒性。常见的池化操作包括:
- 最大池化(Max Pooling):取局部区域的最大值。
- 平均池化(Average Pooling):取局部区域的平均值。
池化层示意图:
图 2: 最大池化操作示意图

1.3 批归一化(Batch Normalization)
批归一化通过对每一批数据进行标准化处理,加速训练并提高模型稳定性。
- 作用:缓解梯度消失问题,提升收敛速度。
- 公式:

二、经典 CNN 架构
2.1 LeNet
LeNet 是最早的 CNN 架构之一,由 Yann LeCun 提出,主要用于手写数字识别。
- 特点:包含卷积层、池化层和全连接层。
- 应用:MNIST 数据集。
LeNet 结构图:
图 3: LeNet 架构图

2.2 AlexNet
AlexNet 在 2012 年 ImageNet 竞赛中取得突破性成绩,标志着深度学习时代的到来。
- 特点:引入 ReLU 激活函数、Dropout 和 GPU 加速。
- 创新点:首次使用多层卷积网络。
AlexNet 结构图:
图 4: AlexNet 架构图

2.3 VGG
VGG 以简单的结构和强大的性能著称,通过堆叠多个 3x3 卷积核实现深层网络。
- 特点:统一使用 3x3 卷积核,参数量较大。
- 应用:ImageNet、迁移学习。
VGG 结构图:
图 5: VGG 架构图

2.4 ResNet
ResNet 引入残差连接(Residual Connection),解决了深层网络中的梯度消失问题。
- 特点:通过跳跃连接(Skip Connection)实现信息流动。
- 创新点:支持训练超过 100 层的网络。
ResNet 结构图:
图 6: ResNet 残差块结构图

三、实战项目:使用 ResNet 实现 CIFAR-10 图像分类
3.1 数据集介绍
CIFAR-10 数据集包含 10 类彩色图像(如飞机、汽车、猫等),每类 6,000 张图片,其中 50,000 张用于训练,10,000 张用于测试。
CIFAR-10 样例:
图 7: CIFAR-10 数据集样例

3.2 使用 PyTorch 实现
以下代码展示了如何使用预训练的 ResNet 模型对 CIFAR-10 进行微调。
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms, models# 数据预处理
transform = transforms.Compose([transforms.Resize(224),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
])train_dataset = datasets.CIFAR10(root='./data', train=True, transform=transform, download=True)
test_dataset = datasets.CIFAR10(root='./data', train=False, transform=transform)train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)# 加载预训练的 ResNet 模型
model = models.resnet18(pretrained=True)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 10) # 修改最后一层以适应 CIFAR-10 的 10 类# 定义损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)for epoch in range(5):model.train()running_loss = 0.0for images, labels in train_loader:images, labels = images.to(device), labels.to(device)optimizer.zero_grad()outputs = model(images)loss = criterion(outputs, labels)loss.backward()optimizer.step()running_loss += loss.item()print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader):.4f}")# 测试模型
model.eval()
correct = 0
total = 0
with torch.no_grad():for images, labels in test_loader:images, labels = images.to(device), labels.to(device)outputs = model(images)_, predicted = torch.max(outputs, 1)total += labels.size(0)correct += (predicted == labels).sum().item()print(f"Test Accuracy: {correct / total:.4f}")
程序运行后输出:
Epoch 1, Loss: 0.5615
Epoch 2, Loss: 0.3187
Epoch 3, Loss: 0.2207
Epoch 4, Loss: 0.1634
Epoch 5, Loss: 0.1233
Test Accuracy: 0.9017
可以看到五个批次训练后,最终的精确率是90.17%.
模型选择:为什么选择 PyTorch 而不是 TensorFlow
在本实战项目中,我们选择了 PyTorch 作为实现 ResNet 的框架。以下是详细的原因分析和对比:
1. 动态计算图 vs 静态计算图
- PyTorch 使用动态计算图(Dynamic Computation Graph),允许开发者在运行时动态构建网络结构。这种灵活性非常适合研究和实验,尤其是在需要调试或修改模型结构时。
- TensorFlow 在早期版本中主要依赖静态计算图(Static Computation Graph),虽然从 TensorFlow 2.x 开始引入了 Eager Execution 模式以支持动态图,但其底层仍保留了静态图的复杂性,可能增加学习成本。
优势:PyTorch 的动态图设计使得代码更加直观,易于理解和调试,特别适合初学者和研究人员。
2. 社区与生态系统
- PyTorch 的社区活跃度近年来迅速增长,尤其在学术界备受青睐。许多最新的深度学习研究成果(如 Vision Transformer、Diffusion Models)都优先提供 PyTorch 实现。
- TensorFlow 的生态系统更加成熟,特别是在工业部署领域具有明显优势,但在研究领域的创新速度相对较慢。
优势:对于本项目中的图像分类任务,PyTorch 提供了更丰富的预训练模型(如 torchvision.models),并且社区资源丰富,便于快速实现和验证。
3. 易用性与代码简洁性
- PyTorch 的 API 设计更加 Pythonic,代码风格接近原生 Python,降低了学习门槛。例如,在定义模型时,PyTorch 使用类继承的方式(
nn.Module),逻辑清晰且易于扩展。 - TensorFlow 的 Keras API 虽然提供了高层次封装,但在某些场景下可能显得不够灵活,尤其是当需要自定义层或损失函数时。
优势:PyTorch 的代码更加简洁直观,适合快速原型开发和教学。
4. 性能与硬件支持
- PyTorch 和 TensorFlow 在性能上基本相当,但在 GPU 加速方面,PyTorch 对 CUDA 的支持更为直接,开发者可以轻松利用 GPU 进行加速。
- TensorFlow 提供了对 TPU 的原生支持,这在大规模分布式训练中是一个显著优势,但对于中小型项目(如 CIFAR-10 分类),TPU 的优势并不明显。
优势:对于本项目,PyTorch 的 GPU 支持已经足够满足需求,且配置简单。
5. 可视化工具
- TensorFlow 提供了强大的可视化工具 TensorBoard,能够实时监控训练过程、绘制损失曲线和可视化模型结构。
- PyTorch 的可视化工具相对较少,但可以通过第三方库(如 TensorBoardX 或内置的
torch.utils.tensorboard)实现类似功能。
劣势:PyTorch 在可视化方面稍逊于 TensorFlow,但对于本项目来说,这一差距并不影响核心任务的完成。
综合以上分析,我们选择 PyTorch 的主要原因在于其动态计算图的灵活性、Pythonic 的代码风格以及丰富的研究社区支持。尽管 TensorFlow 在工业部署和分布式训练方面具有优势,但对于本项目的图像分类任务,PyTorch 更加适合快速实现和迭代。如果你对 TensorFlow 的实现感兴趣,也可以尝试使用 Keras API 构建类似的 ResNet 模型,体验两种框架的不同之处!
四、前沿关联:大模型中的视觉架构(Vision Transformer, ViT)
随着 Transformer 在自然语言处理中的成功,研究者将其引入计算机视觉领域,提出了 Vision Transformer (ViT)。
- 特点:
- 将图像分割为固定大小的 Patch,作为输入序列。
- 使用自注意力机制捕捉全局依赖关系。
- 优势:
- 在大规模数据集上表现优异。
- 可扩展性强,适合超大规模模型。
ViT 结构图:
图 8: Vision Transformer 架构图



总结
本集详细介绍了卷积神经网络的基本原理和经典架构,并通过实战项目展示了如何使用 ResNet 实现 CIFAR-10 图像分类任务。最后,我们探讨了 Vision Transformer 的前沿技术,展望了计算机视觉的未来方向。
希望这篇文章能为你提供清晰的学习路径!如果你有任何问题或想法,欢迎在评论区留言讨论。
附图:
- 图 1: 卷积层示意图
- 图 2: 池化层示意图
- 图 3: LeNet 架构图
- 图 4: AlexNet 架构图
- 图 5: VGG 架构图
- 图 6: ResNet 残差块结构图
- 图 7: CIFAR-10 数据集样例
- 图 8: Vision Transformer 架构图
下集预告:第3集将聚焦于循环神经网络(RNN)与序列建模任务,带你深入了解 LSTM 和 GRU 的改进及其在时间序列预测中的应用。
相关文章:
《深度学习实战》第2集:卷积神经网络(CNN)与图像分类
《深度学习实战》第2集:卷积神经网络(CNN)与图像分类 引言 卷积神经网络(Convolutional Neural Network, CNN)是深度学习在计算机视觉领域的核心工具。从早期的 LeNet 到现代的 ResNet 和 Vision Transformer…...
AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南
目录 1、立创商城下载原理图和PCB图 1.1 打开立创商城 1.2 寻找所需器件 1.3 确定所需芯片 1.4 打开原理图和PCB图 1.5 导出原理图 1.6 确定导出为AD文件 1.7 下载成功 1.8 导出PCB 1.9 确定导出为AD文件 1.10 原理图PCB下载成功 2、原理图和PCB图预处理 2.1 复制…...
DeepSeek掘金——调用DeepSeek API接口 实现智能数据挖掘与分析
调用DeepSeek API接口:实现智能数据挖掘与分析 在当今数据驱动的时代,企业和开发者越来越依赖高效的数据挖掘与分析工具来获取有价值的洞察。DeepSeek作为一款先进的智能数据挖掘平台,提供了强大的API接口,帮助用户轻松集成其功能到自己的应用中。本文将详细介绍如何调用D…...
LangChain系列:精通LangChain的合并文档链
LangChain的合并链旨在解决语言模型处理长文本时的上下文限制问题,包含Stuff、MapReduce、Refine和Rerank四种策略。Stuff链通过简单拼接文档块实现快速处理,适用于短文本但受限于模型token容量;MapReduce链采用分治思想,先独立处…...
rtcwake - Linux下定时唤醒计算机
rtcwake 是一个用于通过实时时钟(RTC)唤醒计算机的工具。它常用于在 Linux 系统中设置计算机在指定时间自动唤醒或关闭。以下是对命令 rtcwake -m off -s ${sleep_time} 的详细解析: 命令解析 bash复制 rtcwake -m off -s ${sleep_time} 1…...
MATLAB在投资组合优化中的应用:从基础理论到实践
引言 投资组合优化是现代金融理论中的核心问题之一,旨在通过合理配置资产,实现风险与收益的最佳平衡。MATLAB凭借其强大的数学计算能力和丰富的金融工具箱,成为投资组合优化的理想工具。本文将详细介绍如何使用MATLAB进行投资组合优化&#…...
什么是“可迭代”
在 Python 中,“可迭代”(Iterable)是一个非常重要的概念,它指的是任何可以被逐个访问其元素的对象。换句话说,如果一个对象支持迭代操作(比如可以通过 for 循环逐个访问其元素),那么…...
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
007-念数字 输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu输入格式: 输入在一行中给出一个整数,如&…...
C#初级教程(6)——函数:从基础到实践
一、函数的核心价值:简化与复用代码 以游戏开发项目为例,在游戏中,角色的移动、攻击等行为并非只在单一场景中出现。设想一下,若每次需要角色执行这些行为时,都要重新编写对应的代码,那将是何等繁琐且易错的…...
【Bluedroid】AVRCP 连接源码分析(一)
一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…...
编程考古-忘掉它,Delphi 8 for the Microsoft .NET Framework
忘掉它吧,作一篇记录! 【圣何塞,加利福尼亚 – 2003年11月3日】在今日的Borland开发者大会上,Borland正式推出了Delphi 8 for Microsoft .NET Framework。这款新版本旨在为Delphi开发者提供一个无缝迁移路径,将现有的…...
Linux-Ansible基础模块
文章目录 模块Command模块Shell模块Script模块 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月22日19点21分 模块 Command模块 Command模块实践 ansible 192.168.1.100 -m com…...
正则表达式–断言
原文地址:正则表达式–断言 – 无敌牛 欢迎参观我的个人博客:正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...):正向预查(positive lookahead),表示某个字符串后面应该跟着什么。但这个字符串本身…...
Swiper插件的运用和学习
Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 Swiper 是目前最流行的免费开源轮播组件之一,它功能强大、高度可定制且兼容性好,支持移动端手势操作和丰富的交互动画。 下载Swiper压缩包 轮播图演示页面。可以看见各种不同切换效果的轮播图 然后解压…...
标准I/O与文件I/O
一、概念 标准IO:标准IO是指程序与标准输入(stdin)、标准输出(stdout)和标准错误(stderr)之间的输入输出操作。通常用于与用户交互或输出调试信息。文件IO:文件IO是指程序与文件系统…...
JavaScript函数-函数的参数
在JavaScript编程语言中,函数是组织代码和实现复杂逻辑的基本单元。而函数参数则是这些功能的重要组成部分,它们允许我们将数据传递给函数,从而使得函数更加通用和灵活。本文将深入探讨JavaScript函数参数的各种特性及其最佳实践。 参数基础…...
Android TabLayout 实现随意控制item之间的间距
效果 红色标注是不同的间距。 实现方式 1、xml中定义 <com.google.android.material.tabs.TabLayoutandroid:id"id/tab_layout"android:layout_width"wrap_content"app:tabIndicatorColor"color/color_FF00B2E3"app:tabBackground"a…...
STM32的“Unique device ID“能否修改?
STM32F1系列的"Unique device ID"寄存器的地址为0x1FFFF7E8。 这个寄存器是只读的。 "Unique device ID"寄存器位于“System memory”中。“System memory”地址范围为“0x1FFF F000- 0x1FFF F7FF”。 所有STM32 MCU上都存在系统引导加载程序。顾名思义&a…...
STM32-温湿度上传OneNET项目
一、项目需求 使用 ESP8266 连接 OneNET 云平台,并通过 MQTT 协议上传 DHT11 获取的温湿度值。 二、项目框图 三、DHT11工作原理 参考于良许嵌入式手把手教你玩转DHT11(原理驱动) | 良许嵌入式 3.1 正常工作验证 # 上电后ÿ…...
前端面试-JavaScript 数据类型详解
目录 一、数据类型分类 二、核心区别对比 1. 存储方式 2. 比较方式 3. 类型检测方法 三、特殊类型详解 1. Symbol 2. BigInt 3. null vs undefined 四、常见面试扩展问题 五、总结 一、数据类型分类 JavaScript 数据类型分为 基本数据类型(原始类型&…...
智元 D1 强化学习sim-to-real系列 | 从训练诊断到 Jetson Orin 实机部署(八)
在上篇中,我们已经完成了从策略接入、Lowlevel 控制链打通,到实机首轮部署与部署侧微调的全部关键步骤。到了这里,机器狗已经不再只是“能连上、能跑起来”,而是开始暴露出更真实的问题:速度跟踪是否稳定、原地站立是否…...
在线教程丨Qwen3.6系列首个开源模型Agent编程能力大涨,激活参数仅3B超越Gemma4-31B
近日,Qwen3.6 系列中等尺寸模型 Qwen3.6-35B-A3B 正式开源,仅激活 3B 便在多项关键编程基准上超越了上一代模型 Qwen3.5-35B-A3B 以及不久前开源的 Gemma4-31B 。 具体而言,在考察终端编程的 Terminal-Bench2.0 、长程编程任务 NL2Repo 、真…...
ROS+Catkin项目如何正确生成compile_commands.json?让clangd在VSCode里精准补全
ROSCatkin项目如何正确生成compile_commands.json?让clangd在VSCode里精准补全 在ROS开发中,代码补全和跳转的准确性直接影响开发效率。许多开发者从传统的C/C插件转向clangd时,常遇到#include报错、符号无法解析等问题。这背后往往是因为cla…...
时间序列预测残差可视化技术与实战应用
1. 时间序列预测残差可视化的重要性在时间序列预测项目中,我们常常过于关注模型本身的准确性指标,而忽视了预测残差(实际值与预测值之差)所蕴含的宝贵信息。就像医生通过化验报告上的异常指标诊断病情一样,预测残差能够…...
NVIDIA Blackwell架构与vGPU 19.0技术解析及实战部署
1. NVIDIA Blackwell架构与vGPU 19.0的技术突破1.1 Blackwell GPU的硬件革新NVIDIA RTX PRO 6000 Blackwell Server Edition采用的全新架构带来了三项关键升级:首先,96GB GDDR7显存将带宽提升至传统GDDR6的1.5倍,实测在4K视频转码场景中可降低…...
Spring Boot 与 MyBatis 性能优化
Spring Boot 与 MyBatis 性能优化实战 在当今快速迭代的互联网应用中,性能优化是提升系统稳定性和用户体验的关键。Spring Boot 作为轻量级框架,与 MyBatis 这一灵活高效的 ORM 工具结合,已成为 Java 开发的主流选择。随着数据量增长和业务复…...
彻底禁用Windows Defender:终极性能优化与系统控制指南
彻底禁用Windows Defender:终极性能优化与系统控制指南 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mirrors/wi…...
5大核心优势:Vue3+Ant Design后台框架的实战应用指南
5大核心优势:Vue3Ant Design后台框架的实战应用指南 【免费下载链接】ant-design-vue3-admin 一个基于 Vite2 Vue3 Typescript tsx Ant Design Vue 的后台管理系统模板,支持响应式布局,在 PC、平板和手机上均可使用 项目地址: https://…...
当UEBA遇上零信任:实战中如何用行为分析加固你的身份安全防线?
当UEBA遇上零信任:实战中如何用行为分析加固你的身份安全防线? 想象一下,某天凌晨三点,你的财务总监账号突然从境外IP登录,批量下载了所有客户合同。传统安全系统可能只会记录这次登录,而零信任架构下的UEB…...
零阶优化算法原理与实践指南
1. 零阶优化算法基础解析零阶优化算法(Zeroth-Order Optimization)是一类仅通过目标函数值进行优化的方法,与需要梯度信息的一阶优化算法形成鲜明对比。这类方法的核心优势在于其普适性——不需要目标函数可微,甚至不需要知道目标…...
