【深度学习与NLP】——深度卷积神经网络AlexNet

news2024/11/15 4:22:59

目录

一、卷积神经网络的发展历程

二、简要介绍

三、代码实现

四、缺点和过时的地方


一、卷积神经网络的发展历程

  1. 早期理论基础阶段(20 世纪 60 年代 - 80 年代)
    • 1968 年,Hubel 和 Wiesel 通过对猫视觉神经的研究,发现了视觉神经元对图像边缘的响应特性,提出了感受野的概念,为卷积神经网络的发展奠定了生物学基础 3。
    • 1980 年,日本科学家福岛邦彦提出了 Neocognitron,它模拟了脑神经科学的结构,具备现代 CNN 的一些基本元素,如逐步的滤波器、使用 ReLU 提供非线性、平均池化下采样等,保证了网络的平移不变性,实现了稀疏交互,但无法进行有监督学习。
  2. 初步发展阶段(20 世纪 90 年代)
    • 1990 年,Yann LeCun 将反向传播算法应用到类似 Neocognitron 的网络上,实现了一个用于手写数字识别的神经网络,简化了卷积操作以便于反向传播的应用,这是 CNN 用于有监督学习的早期重要实践。
    • 1998 年,Yann LeCun 提出 LeNet - 5,这是具有里程碑意义的 CNN 架构。LeNet - 5 定义了 CNN 的基本框架,包括卷积层、池化层和全连接层,在手写数字识别任务上取得了良好效果。不过,当时受限于计算机算力和数据量,其应用范围相对有限。
  3. 沉寂阶段(2000 年 - 2011 年):这一时期,由于计算资源有限、数据集规模较小以及其他机器学习方法(如支持向量机)的竞争等原因,卷积神经网络的发展相对缓慢,处于沉寂状态。
  4. 复兴与突破阶段(2012 年 - 至今)
    • 2012 年,AlexNet 诞生。它在当年的 ImageNet 大规模视觉识别挑战赛中以显著优势夺冠,标志着神经网络的复苏和深度学习的崛起。AlexNet 采用了更深的网络结构,使用 ReLU 激活函数、数据增强、mini - batch SGD 优化、在 GPU 上训练以及 Dropout 技术来避免过拟合等创新方法,极大地推动了 CNN 的发展,也让更多研究者关注到深度学习的潜力 。
    • 2014 年,VGGNet 被提出,它通过增加网络深度(如 VGG - 16、VGG - 19),证明了增加网络深度可以提升模型性能,为后续研究提供了思路。
    • 2015 年,ResNet 出现,它通过引入残差结构,有效解决了随着网络深度增加而导致的梯度消失问题,使得训练更深的网络成为可能,并且第一个在 ImageNet 图片分类上表现超过人类水准,将 CNN 的性能推向新高度。此后,各种基于 ResNet 的改进和衍生模型不断涌现。
    • 2017 年,SENet 提出,通过引入注意力机制,让网络能够自适应地关注重要特征,进一步提升了模型的性能和表达能力。
    • 近年来,CNN 不断与其他技术融合,如与生成对抗网络(GAN)结合用于图像生成、与强化学习结合用于智能决策等,同时在自动驾驶、医疗影像分析、智能安防等众多领域得到广泛应用,且随着硬件计算能力的持续提升和大规模数据集的不断丰富,其性能和应用场景还在不断拓展和深化。

二、简要介绍

AlexNet 是一种深度卷积神经网络,在 2012 年的 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得了突破性的成果。

1. 网络结构

AlexNet 包含 8 层,其中前 5 层为卷积层,后 3 层为全连接层。具体结构如下:

  1. 第一层:卷积层,使用 96 个大小为 11×11×3 的卷积核,步长为 4。
  2. 第二层:最大池化层,池化窗口大小为 3×3,步长为 2。
  3. 第三层:卷积层,使用 256 个大小为 5×5 的卷积核。
  4. 第四层:最大池化层,池化窗口大小为 3×3,步长为 2。
  5. 第五层:卷积层,使用 384 个大小为 3×3 的卷积核。
  6. 第六层:卷积层,使用 384 个大小为 3×3 的卷积核。
  7. 第七层:卷积层,使用 256 个大小为 3×3 的卷积核。
  8. 第八层:全连接层,包含 4096 个神经元。最后两层全连接层也分别有 4096 个神经元,输出层则根据具体任务确定神经元数量。

2. 特点

  1. 非线性激活函数

    使用 ReLU(Rectified Linear Unit)作为激活函数,相比传统的 sigmoid 和 tanh 函数,ReLU 能够加速训练过程,并且在一定程度上缓解了梯度消失问题。
  2. 数据增强

    通过对图像进行随机裁剪、水平翻转等操作,增加了数据的多样性,提高了模型的泛化能力。
  3. Dropout

    在训练过程中随机将一些神经元的输出置为 0,有效地减少了过拟合。
  4. 多 GPU 训练

    由于网络规模较大,训练数据也很多,AlexNet 采用了多 GPU 并行训练的方式,加快了训练速度。

3. 影响

AlexNet 的出现极大地推动了深度学习在计算机视觉领域的发展。它证明了深度神经网络在图像识别等任务上的强大能力,为后续的研究提供了重要的参考和启示。此后,各种深度神经网络架构不断涌现,性能也不断提升。总之,AlexNet 是深度学习发展历程中的一个重要里程碑,它的创新之处和优异性能对计算机视觉领域产生了深远的影响。

三、代码实现

 AlexNet 网络特点
它在多方面使用了创新性的结构 ;
(1)提出了 非饱和神经元 ReLU 减小 梯度下降 的训练时间;
(2)提用了 多GPU并行卷积操作 实现模型训练 加速 ;
(3)提用了 LRN(Local Response Normalization) 实现局部响应 归一化 ;
(4)提出了 Overlapping Pooling 使用 stride=2,kernal_size=3 使池化重叠,优于之前的 stride=2,kernal_size=2 ;
(5)引入了 dropout 正则化方法减少 全连接层中的 过拟合 ;
(6)此外,还采用 数据增强 的方法扩充数据集用以减小 过拟合 线性;
论文中 数据增强 采用的方式 :1、图像的平移和水平旋转;2、改变图像RGB通道的强度;

 实现代码:

import torch
import torch.nn as nn
from torchinfo import summary

# 定义 AlexNet 类,继承自 nn.Module
class AlexNet(nn.Module):
    def __init__(self, num_classes=1000):
        # 调用父类的初始化方法
        super(AlexNet, self).__init__()
        # 定义特征提取部分的网络结构
        self.features = nn.Sequential(
            # 第一个卷积层,输入通道数为 3(彩色图像),输出通道数为 48,卷积核大小为 11x11,步长为 4,填充为 2
            nn.Conv2d(3, 48, kernel_size=11, stride=4, padding=2),
            # 使用 ReLU 激活函数,inplace=True 表示在原张量上进行操作,节省内存
            nn.ReLU(inplace=True),
            # 第一个最大池化层,池化核大小为 3x3,步长为 2
            nn.MaxPool2d(kernel_size=3, stride=2),
            # 第二个卷积层,输入通道数为 48,输出通道数为 128,卷积核大小为 5x5,填充为 2
            nn.Conv2d(48, 128, kernel_size=5, padding=2),
            nn.ReLU(inplace=True),
            # 第二个最大池化层,池化核大小为 3x3,步长为 2
            nn.MaxPool2d(kernel_size=3, stride=2),
            # 第三个卷积层,输入通道数为 128,输出通道数为 192,卷积核大小为 3x3,填充为 1
            nn.Conv2d(128, 192, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # 第四个卷积层,输入通道数为 192,输出通道数为 192,卷积核大小为 3x3,填充为 1
            nn.Conv2d(192, 192, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # 第五个卷积层,输入通道数为 192,输出通道数为 128,卷积核大小为 3x3,填充为 1
            nn.Conv2d(192, 128, kernel_size=3, padding=1),
            nn.ReLU(inplace=True),
            # 第三个最大池化层,池化核大小为 3x3,步长为 2
            nn.MaxPool2d(kernel_size=3, stride=2),
        )
        # 定义分类器部分的网络结构
        self.classifier = nn.Sequential(
            # 第一个全连接层,输入维度为 128*6*6,输出维度为 2048
            nn.Linear(128 * 6 * 6, 2048),
            nn.ReLU(inplace=True),
            # Dropout 层,用于防止过拟合
            nn.Dropout(),
            # 第二个全连接层,输入维度为 2048,输出维度为 2048
            nn.Linear(2048, 2048),
            nn.ReLU(inplace=True),
            # 第三个全连接层,输入维度为 2048,输出维度为 num_classes(分类的类别数)
            nn.Linear(2048, num_classes),
        )

    def forward(self, x):
        # 前向传播过程,将输入 x 通过特征提取部分
        x = self.features(x)
        # 将特征图展平为一维向量
        x = torch.flatten(x, 1)
        # 将展平后的向量通过分类器部分得到输出
        out = self.classifier(x)
        return out

# 定义测试函数
def test():
    # 创建一个 AlexNet 实例
    net = AlexNet()
    # 生成一个随机输入张量,形状为 (1, 3, 224, 224),表示一个批量大小为 1 的彩色图像,尺寸为 224x224
    y = net(torch.randn(1, 3, 224, 224))
    # 打印输出张量的大小
    print(y.size())
    # 使用 torchinfo 库的 summary 函数打印网络结构和参数信息
    summary(net, (1, 3, 224, 224))

# 如果当前文件作为主程序运行
if __name__ == '__main__':
    # 调用测试函数
    test()

输出:

四、缺点和过时的地方

  • 缺点
  • 计算资源需求大:AlexNet 包含大量的参数,例如中间两个全连接层有很大的 4096 个神经元,这导致计算量庞大,对硬件要求非常高,需要大量的训练数据和计算资源,在训练和部署时成本较高。
  • 过拟合风险:尽管使用了一些方法如 Dropout 来减少过拟合,但在某些情况下仍可能存在过拟合问题。例如在数据量不够丰富或模型复杂度相对数据规模过高时,容易出现对训练数据过度拟合,而对新数据的泛化能力不足。
  • 缺乏对多尺度特征的有效融合:主要依赖固定大小的卷积核和池化操作来提取特征,对于不同尺度的物体,可能不能很好地自适应地提取到最有效的特征,在处理多尺度目标方面的能力相对有限。
  • 过时的地方
  • 网络结构设计:随着技术发展,后续出现了许多更高效、更精巧的网络结构。比如 VGGNet 通过重复使用简单的卷积层堆叠,构建了更深层且性能更优的网络;GoogleNet/Inception 引入了 Inception 模块,通过不同尺寸的卷积和池化层并行处理,提高了计算效率和准确率;ResNet 引入了残差学习框架,解决了深层网络训练困难的问题,能构建极深的网络并取得更好的性能等。相比之下,AlexNet 的结构设计显得相对简单和基础 1。
  • 激活函数:虽然 AlexNet 使用 ReLU 激活函数在当时是一个重要创新,解决了传统激活函数(如 Sigmoid 和 Tanh)在训练时的梯度消失问题,加快了训练速度。但后续又出现了如 Leaky ReLU、PReLU、ELU 等改进的激活函数,它们在某些方面能更好地处理负值或解决神经元 “死亡” 问题,进一步提升了网络的性能和稳定性。
  • 训练方法和优化技术:在训练过程中,AlexNet 使用的随机梯度下降(SGD)及其一些基本的优化策略,在当下看来也较为简单。现在有许多更先进的优化算法,如 Adagrad、Adadelta、RMSProp、Adam 等,它们能够自适应地调整学习率,更好地处理复杂的损失函数曲面,加快收敛速度并提高训练效果。
  • 缺乏对硬件的进一步优化:如今的硬件平台(如 GPU、TPU 等)不断发展,新的神经网络架构设计会更充分地考虑如何与硬件特性相结合,以实现更高效的计算和推理。而 AlexNet 在设计时主要基于当时的硬件条件,没有充分利用后续硬件发展带来的新特性和优势进行针对性优化 

参考:

http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

https://blog.csdn.net/weixin_45084253/article/details/124228396 

https://www.cnblogs.com/VisionGo/p/17975756

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

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

相关文章

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型,快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程,将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。 亚马逊云科技开发者社区为开发者们提供全球的…

C++笔记12•面向对象之继承•

继承 1.继承的概念及定义 (1)概念: 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称…

【Linux】进程|进程的查看与管理|创建进程

目录 1️⃣ 进程的概念(Process) 1.什么是进程? 2.多进程管理 3. 描述进程-PCB 2️⃣ 进程的查看与管理 1.使用指令查看进程 2.通过系统调用函数查看pid 3.杀掉进程 4.ppid(父进程id) 3️⃣ 创建进程 fork(…

大模型面试:LLM+向量库的文档对话系统

面试题 1.1 为什么大模型需要外挂(向量)知识库?如何将外部知识注入大模型,最直接的方法:利用外部知识对大模型进行微调 回答 大模型需要外挂(向量)知识库的原因: 知识更新频率:大模型在训练时使用的知识是静态的&a…

关于喷墨打印:液滴喷射及基材影响的那些事儿

大家好,今天我们来探讨一篇关于液滴喷射在生物应用中相关知识的文章——《Understanding droplet jetting on varying substrate for biological applications》是发表于《International Journal of Bioprinting》。在生物打印领域,了解液滴在不同基材上…

做每日计划记录,有什么好的软件推荐2channel茅盾先生《春蚕》苏四嫂的过劳死茅盾的《秋收》主题和象征文学风格

目录 做每日计划记录,有什么好的软件推荐 2channel 茅盾先生《春蚕》 苏四嫂的过劳死 茅盾的《秋收》 主题和象征 文学风格 做每日计划记录,有什么好的软件推荐 做每日计划记录的软件有很多,下面是几款非常实用的推荐,适合…

基于yolov8的人员溺水检测告警监控系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的人员溺水检测告警监控系统是一种高效、智能的安全监控解决方案。该系统利用YOLOv8目标检测算法的先进性能,实现了对水域中人员溺水行为的精准识别与快速响应。 YOLOv8继承了YOLO系列算法的优点,如单次预测、速度快、精度高&a…

牛客周赛 Round 57(A,B,C,D,E,F,G)

比赛链接 官方题解 这场的题还不错,D是一个计算几何,考察到了一些线性代数里叉积的知识,E是爆搜打表,不太常规,所以做起来感觉还不错?FG偏简单,F是multiset线段树,G是很简单的构造…

C语言 | Leetcode C语言题解之第376题摆动序列

题目&#xff1a; 题解&#xff1a; int wiggleMaxLength(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int prevdiff nums[1] - nums[0];int ret prevdiff ! 0 ? 2 : 1;for (int i 2; i < numsSize; i) {int diff nums[i] - nums[i - 1];if ((…

maxwell读取mysql binlog到kafka

下载地址 https://maxwells-daemon.io/解压压缩包 tar -zxvf maxwell-1.29.0.tar.gz -C /opt/module/初始化maxwell元数据库 在mysql中为maxwell创建一个数据库 复制 config.properties.example 文件 cp config.properties.example config.properties修改config.propertie…

分享一个基于node.js的宠物医院预约挂号系统vue宠物医院管理系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

JS基础之【各种运算符与运算符的优先级】

&#x1f680; 个人简介&#xff1a;某大型国企高级前端开发工程师&#xff0c;7年研发经验&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码…

Nvidia财报前夕:市场预期股价波动创纪录,AI芯片巨头引领市场热潮

引言&#xff1a;Nvidia财报前市场躁动&#xff0c;股价波动预期创新高 随着Nvidia&#xff08;英伟达&#xff09;即将发布其最新财报&#xff0c;全球投资者和交易员们正屏息以待。作为全球人工智能芯片市场的领军者&#xff0c;Nvidia的每一次财报都牵动着市场的神经。据分析…

基于SpringBoot的校园二手交易平台

1.项目介绍 基于SpringBoot实现的校园二手交易平台。 技术框架&#xff1a;SpringBoot2.0.0 MyBatis1.3.2 Mysql5.7 Bootstrap 运行环境&#xff1a;jdk8 IntelliJ IDEA maven3 后台首页、菜单管理、角色管理、用户管理、日志管理、数据备份、分类管理、物品管理、 求…

BMC解决方案丨服务器故障诊断与预测平台方案设计与实现

近日&#xff0c;OurBMC社区理事成员单位浪潮计算机科技有限公司基于开放原子开源大赛的成果梳理了一份成熟的可落地方案——《基于BMC技术的服务器故障诊断与预测平台方案设计与实现》。该方案为开放原子开源大赛的冠军之作&#xff0c;极大推动了社区产业化落地的发展和工作。…

怎么用AI做赚钱的表情包?我来教你!真能轻松变现?我们试了试。

最近看到一则新闻&#xff0c;一个小哥靠做微信表情包赚了几十万&#xff0c;这引起了我的兴趣。 这让我想到&#xff0c;无论是传统的利他思维&#xff0c;还是投资自己的头脑&#xff0c;或者是表情包这样的新兴赚钱方式&#xff0c;成功的路径从未改变。 利他思维&#xff…

SystemTap(stap)脚本举例 包括系统调用监控,函数执行时间 函数出参信息和信号捕捉脚本等

SystemTap 脚本举例 运行环境检查 要想使用SystemTap&#xff0c;需要依赖环境支持。可以执行如下命令查看stap是否已经安装。 stap -ve probe begin { log("hello world") exit () }对内核函数增加探针&#xff0c;需要debuginfo信息&#xff0c;可以通过如下步检…

PyTorch构建神经网络

【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战&#xff08;人工智能技术丛书&#xff09;》(宋立桓&#xff0c;宋立林)【摘要 书评 试读】- 京东图书 (jd.com) 训练一个神经网络通常需要提供大量的数据&#xff0c;我们称之…

特殊类设计(5个)与类型转换

引子&#xff1a;在生活中我们经常有不同类的需求&#xff0c;因此我们有了特殊类的设计&#xff08;有很多种模式等&#xff09;。由于类型需求不同我们有了类型转换。今天我们就来略讲略讲一下这方面的知识。 特殊类设计&#xff08;5个&#xff09; 注意&#xff1a;关键字…

uniapp发布包app.json文件配置及发包上传注意事项

一、分包&#xff08;提示主包大小不小于1.5M&#xff09; 我的分包代码 二、未开启js压缩 操作:【必须】在工具「详情」-「本地设置」中开启「上传代码时自动压缩脚本文件」的设置 三、未开启组件懒注入&#xff08;按需注入&#xff09; 只需将代码"lazyCodeLoading&qu…