一文读懂现代卷积神经网络—深度卷积神经网络(AlexNet)

目录

深度卷积神经网络(AlexNet)是什么?

一、AlexNet 的核心创新

1. 深度架构

2. ReLU 激活函数

3. 数据增强

4. Dropout 正则化

5. GPU 并行计算

6. 局部响应归一化(LRN)

二、AlexNet 的网络结构

三、AlexNet 的革命性影响

AlexNet的架构图

深度卷积神经网络(AlexNet)和卷积神经网络(CNN)的区别

一、历史背景:从浅层到深度

二、架构设计:从简单到复杂

三、训练技术:从基础到创新

四、应用效果:从实验到实用

完整代码

实验结果


深度卷积神经网络(AlexNet)是什么?

AlexNet 是 2012 年由 Alex Krizhevsky、Ilya Sutskever 和 Geoffrey Hinton 提出的深度卷积神经网络(DCNN),它在当年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中以15.3% 的 Top-5 错误率夺冠,大幅超越第二名(26.2%),标志着深度学习在计算机视觉领域的突破性成功,并引发了 AI 领域的革命。以下是其核心特点、架构和影响的详解:

一、AlexNet 的核心创新

1. 深度架构
  • 8 层网络:5 个卷积层 + 3 个全连接层,总参数约 6000 万(当时史无前例)。
  • 突破传统浅层网络限制:此前 CNN(如 LeNet-5)仅 7 层,AlexNet 证明深度对模型能力的关键作用。
2. ReLU 激活函数
  • 首次大规模使用ReLU(Rectified Linear Unit)f(x) = \max(0, x)解决了 Sigmoid/Tanh 的梯度消失问题,训练速度提升 6 倍。
3. 数据增强
  • 通过随机裁剪、水平翻转、颜色扰动等方法扩充训练数据,显著减少过拟合。 示例:从原图随机裁剪 224×224 区域,每个图像生成数百万变体。
4. Dropout 正则化
  • 在全连接层引入Dropout(随机丢弃 50% 神经元),防止过拟合,提升泛化能力。
  • 该技术已成为深度学习标配。
5. GPU 并行计算
  • 利用双 NVIDIA GTX 580 GPU并行训练(每个 GPU 负责部分层),将训练时间从数周缩短至数天。
  • 开创了深度学习与 GPU 硬件协同发展的模式。
6. 局部响应归一化(LRN)
  • 通过相邻通道间的竞争机制增强泛化能力(后续被 Batch Normalization 替代)。

二、AlexNet 的网络结构

输入层 (224×224×3)↓
卷积层1: 96个11×11卷积核,步长4 → ReLU → LRN → 最大汇聚(3×3,步长2)↓
卷积层2: 256个5×5卷积核,步长1 → ReLU → LRN → 最大汇聚(3×3,步长2)↓
卷积层3: 384个3×3卷积核,步长1 → ReLU↓
卷积层4: 384个3×3卷积核,步长1 → ReLU↓
卷积层5: 256个3×3卷积核,步长1 → ReLU → 最大汇聚(3×3,步长2)↓
全连接层1: 4096神经元 → ReLU → Dropout(0.5)↓
全连接层2: 4096神经元 → ReLU → Dropout(0.5)↓
全连接层3: 1000神经元 (对应ImageNet的1000个类别)↓
Softmax层: 输出类别概率分布
 

关键点

  • 双 GPU 设计:前两层卷积和全连接层在两个 GPU 上并行计算(如图)。
  • 特征图尺寸变化:通过卷积和汇聚逐步减小空间尺寸(224→55→27→13→6),同时增加通道数(3→96→256→384→256)

三、AlexNet 的革命性影响

  1. 开启深度学习时代: AlexNet 的成功证明了深度模型在大规模数据上的有效性,引发学术界和工业界对深度学习的广泛关注。

  2. 推动硬件发展: 凸显 GPU 在深度学习中的核心地位,促使 NVIDIA 等公司加大对 AI 芯片的研发投入。

  3. 改变计算机视觉研究范式: 从手工特征(如 SIFT、HOG)转向端到端的深度神经网络学习,后续 VGG、ResNet 等模型均基于此演进。

  4. 拓展应用边界: 为目标检测(R-CNN)、语义分割(FCN)、人脸识别等任务奠定基础,推动 AI 在医疗、自动驾驶等领域的应用。

AlexNet的架构图

深度卷积神经网络(AlexNet)和卷积神经网络(CNN)的区别

历史背景、架构设计、训练技术、应用效果四个维度对比 AlexNet 与传统 CNN 的核心区别:

一、历史背景:从浅层到深度

维度传统 CNN(如 LeNet-5, 1998)AlexNet(2012)
诞生时间1990 年代(早于深度学习热潮)深度学习复兴时期(ImageNet 竞赛后)
数据规模小规模数据集(如 MNIST,6 万张 28×28 手写数字)大规模数据集(ImageNet,1400 万张 224×224 图像)
硬件支持CPU 训练(计算资源有限)GPU 并行训练(双 GTX 580,算力提升 100 倍)
应用领域简单任务(如手写数字识别、OCR)复杂场景(如 ImageNet 1000 类分类)

二、架构设计:从简单到复杂

维度传统 CNN(如 LeNet-5)AlexNet
网络深度浅(通常≤10 层)深(8 层,首次突破 1000 万参数)
卷积核尺寸大卷积核(如 5×5、7×7)混合尺寸(11×11、5×5、3×3)
通道数少(如 LeNet 第一层 6 个通道)多(AlexNet 第一层 96 个通道)
特征图尺寸小(如 LeNet 最终特征图 16×16)大(AlexNet 最终特征图 6×6×256)
池化策略平均池化为主最大池化为主
网络结构简单串联复杂分支(双 GPU 并行计算)

三、训练技术:从基础到创新

维度传统 CNNAlexNet
激活函数Sigmoid/Tanh(易梯度消失)ReLU(解决梯度消失,加速训练 6 倍)
正则化少量数据增强,无 Dropout大规模数据增强(裁剪、翻转、颜色扰动)+ Dropout(0.5)
归一化局部响应归一化(LRN)
优化器随机梯度下降(SGD),低学习率SGD + 动量(0.9),自适应学习率调整
训练时间数小时至数天数天至数周(依赖 GPU 并行)

四、应用效果:从实验到实用

维度传统 CNNAlexNet
准确率在小规模数据集上表现良好(如 MNIST 99%)在大规模数据集上突破性表现(ImageNet Top-5 错误率 15.3% vs 传统方法 26.2%)
泛化能力对简单任务有效,复杂场景易过拟合通过 Dropout 和数据增强,显著提升泛化能力
计算效率CPU 可承受,但处理大图缓慢依赖 GPU,处理速度提升 100 倍
模型影响学术研究为主,实际应用受限引发工业界关注,推动深度学习商业化

完整代码

"""
文件名: 7.1  深度卷积神经网络(AlexNet)
作者: 墨尘
日期: 2025/7/13
项目名: dl_env
备注: 
"""import torch
from torch import nn
from d2l import torch as d2l
# 手动显示图像(关键)
import matplotlib.pyplot as plt
import matplotlib.text as text  # 新增:用于修改文本绘制# -------------------------- 核心解决方案:替换减号 --------------------------
# 定义替换函数:将Unicode减号U+2212替换为普通减号-
def replace_minus(s):if isinstance(s, str):return s.replace('\u2212', '-')return s# 安全重写Text类的set_text方法,避免super()错误
original_set_text = text.Text.set_text  # 保存原始方法
def new_set_text(self, s):s = replace_minus(s)  # 替换减号return original_set_text(self, s)  # 调用原始方法
text.Text.set_text = new_set_text  # 应用新方法
# -------------------------------------------------------------------------# -------------------------- 字体配置(关键修改)--------------------------
# 解决中文显示和 Unicode 减号(U+2212)显示问题
plt.rcParams["font.family"] = ["SimHei"]
plt.rcParams["text.usetex"] = True  # 使用Latex渲染
plt.rcParams["axes.unicode_minus"] = True  # 正确显示负号
plt.rcParams["mathtext.fontset"] = "cm"    # 确保数学符号(如减号)正常显示
d2l.plt.rcParams.update(plt.rcParams)      # 让 d2l 绘图工具继承字体配置
# -------------------------------------------------------------------------if __name__ == '__main__':# 容量控制和预处理net = nn.Sequential(# 这里使用一个11*11的更大窗口来捕捉对象。# 同时,步幅为4,以减少输出的高度和宽度。# 另外,输出通道的数目远大于LeNetnn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),# 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),# 使用三个连续的卷积层和较小的卷积窗口。# 除了最后的卷积层,输出通道的数量进一步增加。# 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),nn.Flatten(),# 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合nn.Linear(6400, 4096), nn.ReLU(),nn.Dropout(p=0.5),nn.Linear(4096, 4096), nn.ReLU(),nn.Dropout(p=0.5),# 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000nn.Linear(4096, 10))X = torch.randn(1, 1, 224, 224)for layer in net:X = layer(X)print(layer.__class__.__name__, 'output shape:\t', X.shape)# 读取数据集batch_size = 128train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)# 训练AlexNetlr, num_epochs = 0.01, 10d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())# 显示图像plt.show(block=True)  # block=True 确保窗口阻塞,直到手动关闭

实验结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89114.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 垃圾收集算法全面解析

1. 引言1.1 为什么需要垃圾收集?在Java应用中,垃圾收集(Garbage Collection,GC)是一个至关重要的机制,它使得开发者不需要手动管理内存。与传统的语言(如C或C)不同,Java通…

Vmware中安装的CentOS7如何扩展硬盘大小

起初创建虚拟机时,大小设置不合理,导致我在尝试开源项目时空间不足重新扩展硬盘,不仅需要在虚拟机设置中配置,还需要在系统内重新进行分区一、虚拟机设置打开虚拟机设置→硬盘→扩展,将大小设置为自己期望的大小&#…

Python+MongoDB高效开发组合

如大家所知,Python与MongoDB的结合是一种高效的开发组合,主要用于通过Python进行数据存储、查询及管理,利用MongoDB的文档型数据库特性实现灵活的数据处理。下面让 Python 连接上 MongoDB:安装 PyMongo:pip3 install p…

【论文阅读】Masked Autoencoders Are Effective Tokenizers for Diffusion Models

introduce什么样的 latent 空间更适合用于扩散模型?作者发现:相比传统的 VAE,结构良好、判别性强的 latent 空间才是 diffusion 成功的关键。研究动机:什么才是“好的 latent 表征”?背景:Diffusion Models…

每日一SQL 【游戏玩法分析 IV】

文章目录问题案例执行顺序使用分组解决问题 案例 执行顺序 SQL 语句的执行顺序(核心步骤) 同一层级的select查询内部, 别名在整个 SELECT 计算完成前不生效 使用分组解决 select distinct s.product_id, Product.product_name from Sales sleft join …

内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?

企业文件服务器审计工作不仅对提升企业网络信息安全起到重要作用,还能对企业内部网络文件信息是否合规进行判断。因此企业文件服务器审计一直被高度重视。 一、文件服务器为何成为攻击焦点? 企业文件服务器通常集中存储财务报表、人事档案、研发资料、客…

FusionOne HCI 23 超融合实施手册(超聚变超融合)

产品介绍 FusionOne HCI作为实现企业信息一体化的IT基础设施平台,以“软硬件垂直深度集成和调优”、“快速部署”、“统一管理”的理念,提供应用融合部署,提升核心业务运作效率,降低整体采购成本。 FusionOne HCI代表了IT产品的…

AI算姻缘测算小工具流量主微信小程序开源

功能特点 响应式设计:完美适配各种移动设备屏幕尺寸 精美UI界面: 柔和的粉红色渐变背景 圆角卡片设计 精心设计的字体和间距 爱心图标点缀 动态效果: 点击按钮时的动画反馈 测算结果的平滑过渡动画 爱心漂浮动画 进度条动态填充 AI测算功能&a…

Vue获取上传Excel文件内容并展示在表格中

一、安装依赖 npm install xlsx 二、引用依赖 import XLSX from xlsx 三、代码实现 1、注意&#xff1a;函数 analysis 中reader.readAsBinaryString(file)&#xff0c;file的数据格式如图所示 2、示例代码 <!-- 项目使用的前端框架为非流行框架&#xff0c;主要关注…

pipelineJob和pipeline的关系

pipelineJob与pipeline在Jenkins体系中构成配置层与执行层的协同关系,具体关联如下: 一、核心功能定位 概念作用实现层级pipelineJob定义Job的元数据(如SCM配置、日志策略)配置层pipeline描述实际构建流程(如阶段划分、并行任务)执行层scriptPath桥梁作用:将配置层定义…

第二十篇 Word文档自动化:Python批量生成、模板填充与内容修改,告别繁琐排版!

python实现word 自动化重复性文档制作&#xff0c;手动填充模板&#xff0c;效率低下还易错1.python-docx入门&#xff1a;Word文档的“瑞士军刀”&#xff01;1.1 安装与基础概念&#xff1a;文档、段落、运行、表格1.2 打开/创建Word文档&#xff1a;Python与Word的初次接触1…

【C# in .NET】7. 探秘结构体:值类型的典型代表

探秘结构体&#xff1a;值类型的典型代表 在 C# 的类型系统中&#xff0c;结构体&#xff08;Struct&#xff09;作为值类型的典型代表&#xff0c;一直扮演着既基础又微妙的角色。许多开发者在日常编码中虽频繁使用结构体&#xff08;如int、DateTime等&#xff09;&#xff0…

深入探讨Hadoop YARN Federation:架构设计与实践应用

Hadoop YARN Federation简介基本概念与设计初衷Hadoop YARN Federation作为Apache Hadoop 3.x版本的核心特性之一&#xff0c;其本质是通过多集群联合管理机制突破单点资源管理器的性能瓶颈。传统YARN架构中&#xff0c;单个ResourceManager&#xff08;RM&#xff09;需要管理…

STM32固件升级设计——SD卡升级固件

目录 概述 一、功能描述 1、BootLoader部分&#xff1a; 2、APP部分&#xff1a; 二、BootLoader程序制作 1、分区定义 2、 主函数 3、SD卡升级文件检测和更新 4、程序跳转 三、APP程序制作 四、工程配置&#xff08;默认KEIL5&#xff09; 五、运行测试 结束语…

基于Python的图像文字识别系统

主要语言&#xff1a;Python数据库&#xff1a;SQLiteUI界面&#xff1a;PYQT5文字识别模型&#xff1a;Tesseract OCR&#xff08;本地搭建&#xff09;主要功能&#xff1a;登录注册&#xff1a;登录注册功能。图片管理&#xff1a;单张/多张上传、图片列表、预览、删除、切换…

028_分布式部署架构

028_分布式部署架构 概述 本文档介绍如何设计和实现Claude应用的分布式部署架构&#xff0c;包括负载均衡、缓存策略、服务发现、容错机制等。 微服务架构设计 1. 服务拆分策略 from abc import ABC, abstractmethod from typing import Dict, Any, Optional import asyncio im…

duckdb和pyarrow读写arrow格式的方法

arrow格式被多种分析型数据引擎广泛采用&#xff0c;如datafusion、polars。duckdb有一个arrow插件&#xff0c;原来是core插件&#xff0c;1.3版后被废弃&#xff0c;改为社区级插件&#xff0c;名字改为nanoarrow, 别名还叫arrow。 安装 D install arrow from community; D…

机器人位姿变换的坐标系相对性:左乘法则与右乘法则解析​

文章目录1. 全局坐标系下机器人位姿更新的左乘法则​2. 局部坐标系下机器人位姿增量更新的右乘法则​3. 相对位姿的计算3.1. 基于世界坐标系&#xff08;全局变换&#xff09;3.2. 基于 t1t_1t1​ 时刻相机的局部坐标系&#xff08;局部变换&#xff09;3.3. 两者区别设机器人当…

代码随想录算法训练营65期第20天

代码随想录算法训练营65期第20天 本文中使用到一些代码随想录里面的图片或者链接&#xff0c;在这里致敬程序员Carl 二叉搜索树的最近公共祖先 相对于 二叉树的最近公共祖先 本题就简单一些了&#xff0c;因为 可以利用二叉搜索树的特性。 题目链接&#xff1a;代码随想录&…

LLaMA.cpp HTTP 服务参数: --pooling 嵌入模型 池化类型详解

LLaMA.cpp HTTP 服务参数: --pooling 嵌入模型 池化类型详解 --pooling {none,mean,cls,last,rank} 在 llama.cpp 的 embedding server 中&#xff0c;--pooling {none,mean,cls,last,rank} 参数用于指定 如何将输入文本的 token 级嵌入向量聚合为句向量。以下是各选项的详细解…