【深度学习】深度卷积神经网络(AlexNet)

在 LeNet 提出后,卷积神经网络在计算机视觉和机器学习领域中很有名气,但并未起到主导作用。

这是因为 LeNet 在更大、更真实的数据集上训练的性能和可行性还有待研究。

事实上,在 20 世纪 90 年代到 2012 年之间的大部分时间里,神经网络往往被其他机器学习方法超越,如支持向量机。

在计算机视觉中,直接将神经网络与其他机器学习方法比较也许不太公平,因为卷积神经网络的输入是由原始像素值或是经过简单预处理的像素值组成。

而在使用传统机器学习方法时,从业者永远不会将原始像素作为输入。

在传统机器学习方法中,计算机视觉流水线是由经过人的精心设计的特征流水线组成的。

与训练端到端(从像素到分类结果)系统相比,经典机器学习的流水线看起来更像下面这样:

  1. 获取一个有趣的数据集(早期收集数据需要昂贵的传感器)。
  2. 根据光学、几何学及其他偶然发现,手工对特征数据集进行预处理。
  3. 通过标准的特征提取算法,如 SIFT(尺度不变特征变换)和 SURF(加速鲁棒特征)。
  4. 将提取的特征送入分类器中,以训练分类器。

对于机器学习研究人员来说,用优雅的理论去证明各种模型的性质是重要且美丽的;而对计算机视觉研究人员来说,推动领域进步的是数据特征,而不是学习算法。

计算机视觉研究人员相信,从对最终模型精度的影响来说,更大或更干净的数据集、或是稍微改进的特征提取,比任何学习算法带来的进步大得多。

一、学习表征

在 2012 年以前,图像特征都是机械地计算出来的。在当时,设计一套新的特征函数、改进结果,并撰写论文是主流。

另有一些研究人员有不同的想法,他们认为特征本身就应该被学习。

此外,他们还认为,在合理的复杂性前提下,特征应该由多个共同学习的神经网络层组成,每个层都有可学习的参数。

在机器视觉中,最底层可能检测边缘、颜色和纹理。由 Alex 等人(2012)提出的新的卷积神经网络变体 AlexNet 的最底层就学习到了一些类似于传统滤波器的特征抽取器。

AlexNet 的更高层建立在这些底层表示的基础上,表示出更大的特征,如眼睛、鼻子等等。

而更高的层可以检测整个物体,如人、飞机等等。最终的隐藏神经元可以学习图像的综合表示,从而使得属于不同类别的数据易于区分。

尽管一直有一群执着的研究者不断钻研,试图学习视觉数据的逐级表征,但很长一段时间都未能有所突破。

深度卷积神经网络的突破出现在 2012 年,可归因于两个因素:数据和硬件。

数据

包含许多特征的深度模型需要大量的有标签数据,才能显著优于基于凸优化的传统方法。

然而,限于早期计算机有限的存储和 90 年代有限的研究预算,大部分研究只基于小的公开数据集。

这一状况在 2010 年前后兴起的大数据浪潮中得到改善。2009 年,ImageNet 数据集发布,并发起 ImageNet 挑战赛,其推动了计算机视觉和机器学习研究的发展。

硬件

深度学习对计算资源的要求很高,训练可能需要数百个迭代轮数,每次迭代都需要通过代价高昂的许多线性代数层传递数据。

然而,用 GPU 训练神经网络改变了这一格局。图形处理器(Graphics Processing Unit, GPU)早年用来加速图形处理,使电脑游戏玩家受益。

GPU 可优化高吞吐量的 4$\times$4 矩阵和向量乘法,从而服务于基本的图形任务。幸运的是,这些数学运算与卷积层的计算惊人地相似。

相比于 CPU,GPU 的综合性能更强,内核也要简单得多,因此 GPU 更加节能。此外,深度学习的许多操作需要较高的内存带宽,而 GPU 拥有 10 倍于 CPU 的带宽。

回到 2012 年的重大突破,Alex 等人意识到卷积神经网络中的计算瓶颈:卷积和矩阵乘法,都是可以在硬件上并行化的操作。于是,他们使用 GPU 加快了卷积运算,推动了深度学习热潮。

二、AlexNet

2012 年,AlexNet 横空出世。它首次证明了学习到的特征可以超越手工设计的特征,一举打破了计算机视觉研究的现状。

AlexNet 使用了 8 层卷积神经网络,其架构和 LeNet 非常相似,如下图所示。

从 LeNet(左)到 AlexNet(右)

尽管它们的设计理念非常相似,但也存在显著差异:

  1. AlexNet 相较于 LeNet-5 要深得多,其由 8 层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。
  2. AlexNet 使用 ReLU 而不是 sigmoid 作为激活函数。

模型设计

在 AlexNet 的第一层,卷积窗口的形状是 11$\times$11,比 LeNet 中大得多。

这是因为 ImageNet 中使用的图像要比 MNIST 大得多,因此需要一个更大的卷积窗口来捕获目标。

第二层中的卷积窗口缩减为 5$\times 5 ,然后是 3 5,然后是 3 5,然后是3\times 3 ,在第一层、第二层和第五层卷积层后,加入窗口形状为 3 3,在第一层、第二层和第五层卷积层后,加入窗口形状为 3 3,在第一层、第二层和第五层卷积层后,加入窗口形状为3\times$3、步幅为 2 的最大汇聚层。而且,AlexNet 的通道数是 LeNet 的 10 倍。

AlexNet 将 sigmoid 激活函数改为更简单的 ReLU 激活函数。一方面,ReLU 激活函数的计算更为简单;另一方面,当使用不同的参数初始化方法时,ReLU 激活函数使训练模型更加容易。

容量控制和预处理

AlexNet 通过暂退法(Dropout)控制全连接层的模型复杂度,而 LeNet 只使用了权重衰减。

为了进一步扩充数据,AlexNet 在训练时增加了大量的图像增强数据,如翻转、裁切和变色。这使得模型更加健壮,更大的样本量有效地减少了过拟合。

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层来减轻过拟合,暂退概率0.5nn.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))

数据集准备

即使在现代 GPU 上,使用 ImageNet 数据集训练也需要数小时或数天的时间,因此我们继续使用 Fashion-MNIST 数据集来实现 AlexNet 模型。

但由于 Fashion-MNIST 数据集中的图像(28$\times 28 )远低于 I m a g e N e t 图像,为了有效使用 A l e x N e t 架构,我们把图像 r e s i z e 变换为 224 28)远低于 ImageNet 图像,为了有效使用 AlexNet 架构,我们把图像 resize 变换为 224 28)远低于ImageNet图像,为了有效使用AlexNet架构,我们把图像resize变换为224\times$224。

模型训练

定义好模型以及变换数据集后,训练的代码和前面 LeNet 几乎一样,不过这里采用的是小学习率(0.01)和小batch_size(128)。

LeNet 模型训练的代码上次忘了放了,放到这篇文章附件里。

这次输入的图像增大很多,导致训练时间久了不少,我的拯救者风扇响个不停。第 10 轮训练后的相关结果为:

10轮的训练损失为0.32810轮的训练精度为0.87910轮的测试集精度为0.885

可以看到精度已经很接近 90%,相比 LeNet 有一定提高,这得益于 Dropout、ReLU 的使用和预处理。

尽管 AlexNet 的代码仅比 LeNet 多几行,但这中间跨越的时间却有 20 来年。目前 AlexNet 已经被很多更有效的架构超越,但它是从浅层网络到深层网络的关键一步。

LeNet 与 AlexNet 模型训练的代码见附件:

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

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

相关文章

电线杆上电气组件检测系统源码分享

电线杆上电气组件检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

视频怎么制作成二维码?视频轻松生成二维码的3步操作

现在很多人为了能够更快捷的实现视频内容的分享,会通过将视频生成二维码的方式,让其他人可以通过扫描二维码来查看视频内容。这种方式不需要用户存储视频,扫码就能够在设备上查看视频,有利于提升查看视频的便捷性,可以…

【秋招笔试题】多多排序

解法&#xff1a;简单语法题 package com.sky;import java.util.*;public class Test1 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int N sc.nextInt();int M sc.nextInt();List<String> words new ArrayList<>(N);for (in…

关于TrustedInstaller权限

前言 我们在在删除某些文件时会发现权限不够的情况&#xff0c;那是因为自从 Windows Vista 以来&#xff0c;为了提升安全性&#xff0c;微软对于权限的把控越来越紧。为了对抗恶意软件随意修改系统文件&#xff0c;Trustedinstaller 应运而生。 各权限之间的关系 普通人:Us…

C++STL--------string

文章目录 一、STL介绍二、string1、constructor构造函数2、operator[]方括号运算符重载3、iterator迭代器4、reverse_iterator反向迭代器5、size和length6、capacity7、clear8、shrink_to_fit9、at10、push_back11、append 二、auto类型(C11)1、使用2、真正的价值 三、范围for(…

python全栈学习记录(十八)re、os和sys、subprocess

re、os和sys、subprocess 文章目录 re、os和sys、subprocess一、re1.正则字符2.正则表达式的使用3.group的使用4.贪婪匹配与惰性匹配5.其他注意事项 二、os和sys1.os2.sys 三、subprocess 一、re python中的re模块用来使用正则表达式&#xff0c;正则就是用一系列具有特殊含义…

2024 年最新 Protobuf 结构化数据序列化和反序列化详细教程

Protobuf 序列化概述 Protobuf&#xff08;Protocol Buffers&#xff09;是由Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法。它用于在不同系统之间高效地交换数据。Protobuf使用定义文件&#xff08;.proto&#xff09;来描述数据结构&#xff0c;并通过…

Pytest测试实战|执行方式

Pytest测试实战 The pytest framework makes it easy to write small, readable tests, and can scale to support complex functional testing for applications and libraries. 这段话很好地阐述了Pytest的设计思想与强大的特性。在之前阐述了Pytest编写测试用例规范与搜索规…

R包:gplots经典热图

加载R包 # install.packages("gplots")library("gplots")数据 mat <- matrix(rnorm(1200), ncol6)画图1 heatmap.2(xmat)画图2 heatmap.2(xmat, ColvFALSE, dendrogram"row",scale"row",col"bluered",trace"non…

828华为云征文 | 解锁企业级邮件服务,在华为云Flexus x实例上部署Mailcow开源方案

前言 华为云Flexus X实例携手Mailcow开源邮件方案&#xff0c;为企业打造了一个既高效又安全的邮件服务解决方案。Flexus X实例的柔性算力与高性能&#xff0c;是这一方案的坚实基石。它提供CPU内存的灵活定义&#xff0c;以经济型价格实现旗舰级性能&#xff0c;确保邮件服务的…

大模型分布式训练并行技术(一)-概述

近年来&#xff0c;随着Transformer、MOE架构的提出&#xff0c;使得深度学习模型轻松突破上万亿规模参数&#xff0c;传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此&#xff0c;我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

Gitee基本指令操作

目录 1.概念 2. git的基本指令 3. .gitignore 文件 4 . Linux git || gitee || github 1.概念 Git是一种版本控制的软件。 Git是免费且开源的。 Git常被称为 去中心化的分布式的 数据存储。 【其实git也可以进行本地版本控制。对于git&#xff0c;可理解为是一个 本地版本…

超轻量级电竞体验,还有8K超高回报率,雷柏VT1 Air MAX上手

PC玩家想要获得更精彩的游戏体验&#xff0c;除了要关注主机上显卡、CPU等方面的配置&#xff0c;还需要键、鼠标的操控体验跟得上节奏&#xff0c;而在这方面&#xff0c;国产品牌雷柏算是行业里的翘楚&#xff0c;尤其是这两年&#xff0c;连续不断的推出了多个电竞系列鼠标&…

3. 函数

函数是 JavaScript 编程中最重要的工具之一。用一个值封装一段程序的概念有很多用途。它为我们提供了一种结构化大型程序的方法&#xff0c;可以减少重复&#xff0c;将名称与子程序关联起来&#xff0c;并将这些子程序相互隔离。 函数最明显的应用是定义新的词汇。在散文中创造…

2024 天池云原生编程挑战赛决赛名单出炉,冠军来自中山大学、昆仑数智战队

9 月 20 日&#xff0c;2024 天池云原生编程挑战赛决赛答辩完美落幕&#xff0c;12 支进入决赛的团队用精彩的答辩&#xff0c;为历时 3 个月的大赛画下了圆满的句号。其中&#xff0c;来自中山大学的陈泓仰以及来自昆仑数智的冉旭欣、沈鑫糠、武鹏鹏&#xff0c; 以出色的方案…

Nordic软件二[蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题][BSP代码模块修改管脚和相关机制]

蓝牙协议栈初始化卡死(时钟源默认外部晶振但是板子是内部RC)问题 本文摘录于&#xff1a;https://blog.csdn.net/chengbaojin/article/details/103778150只是做学习备份之用&#xff0c;绝无抄袭之意&#xff0c;有疑惑请联系本人&#xff01; 先参考上面的文章做如下修改: …

中国科学院云南天文台博士招生目录

中国科学院云南天文台是专业基础研究与应用研究结合的综合性天文研究机构&#xff08;其前身是1938年中央研究院天文研究所在昆明东郊凤凰山创建的凤凰山天文台&#xff09;&#xff0c;总部在云南省昆明市&#xff0c;设有两个观测站&#xff08;丽江高美古天文观测站和澄江抚…

使用通义灵码,参与开源项目全程纪实

作者&#xff1a;shuipin100-34561 背景 缘起 OceanBase。作为一个充满好奇心的 DBA&#xff0c;一直一来想探寻数据库的内部世界。开源为我们这些好奇的猫打开了一扇新世界的大门。OceanBase 作为分布式关系型数据库的排头兵&#xff0c;自然进入了我的优选名单。起初走进了…

ComfyUI中缺失节点安装一点小小注意事项

加载工作流&#xff0c;遇到了红当当的缺失节点警告窗口&#xff1a; 在ComfyUI-Manager点击安装缺失节点&#xff0c;发现竟然弹出4个&#xff0c;而上面告警窗口中只是缺失3个&#xff0c;究竟是怎么回事呢&#xff0c;刚开始接触ComfyUI时&#xff0c;我也是不管3721&#x…

04 面部表情识别:Pytorch实现表情识别-表情数据集训练代码

总目录:人脸检测与表情分类 https://blog.csdn.net/whiffeyf/category_12793480.html 目录 0 相关资料1 面部表情识数据集2 模型下载3 训练0 相关资料 面部表情识别2:Pytorch实现表情识别(含表情识别数据集和训练代码):https://blog.csdn.net/guyuealian/article/details/1…