《深度学习实战》第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 数据类型分为 基本数据类型(原始类型&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

wpf在image控件上快速显示内存图像
wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...
Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解
文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...

负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...