当前位置: 首页 > news >正文

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

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

文章目录

  • 前言
  • 一、学习表征
  • 二、AlexNet实现
    • 2.1. 模型设计
    • 2.2. 激活函数
    • 2.3. 容量控制与预处理
    • 2.4. 训练模型
  • 总结


前言

在前面学习了卷积神经网络的基本原理,之后将继续学习现代卷积神经网络架构。而本章将学习其中的AlexNet模型。

参考书:
《动手学深度学习》


一、学习表征

在2012年前,图像特征都是机械地计算出来的。事实上,设计一套新的特征函数、改进结果,并撰写论文是盛极一时的潮流。SIFT 、SURF、HOG(定向梯度直方图)、bags of visual words和类似的特征提取方法占据了主导地位。

有一组研究人员,想法则与众不同:他们认为特征本身应该被学习。此外,他们还认为,在合理地复杂性前提下,特征应该由多个共同学习的神经网络层组成,每个层都有可学习的参数。在机器视觉中,最底层可能检测边缘、颜色和纹理。

事实上,Alex Krizhevsky、Ilya Sutskever和Geoff Hinton提出了一种新的卷积神经网络变体AlexNet。在2012年ImageNet挑战赛中取得了轰动一时的成绩。

AlexNet的更高层建立在这些底层表示的基础上以表示更大的特征,如眼睛、鼻子、草叶等等。而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元(位于全连接层)可以学习图像的综合表示,从而使属于不同类别的数据易于区分

二、AlexNet实现

AlexNet和LeNet的架构非常相似,AlexNet使用了8层卷积神经网络,并以很大的优势赢得了2012年ImageNet图像识别挑战赛。

在这里插入图片描述

AlexNet和LeNet的设计理念非常相似,但也存在显著差异:

  1. AlexNet比相对较小的LeNet5要深得多。AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。

  2. AlexNet使用ReLU而不是sigmoid作为其激活函数。

2.1. 模型设计

在AlexNet的第一层,卷积窗口的形状是 11 × 11 11\times11 11×11

由于ImageNet中大多数图像的宽和高比MNIST图像的多10倍以上,因此,需要一个更大的卷积窗口来捕获目标。

第二层中的卷积窗口形状被缩减为 5 × 5 5\times5 5×5,然后是 3 × 3 3\times3 3×3

此外,在第一层、第二层和第五层卷积层之后,加入窗口形状为 3 × 3 3\times3 3×3、步幅为2的最大汇聚层。
而且,AlexNet的卷积通道数目是LeNet的10倍。

在最后一个卷积层后有两个全连接层,分别有4096个输出。

这两个巨大的全连接层拥有将近1GB的模型参数。
由于早期GPU显存有限,原版的AlexNet采用了双数据流设计,使得每个GPU只负责存储和计算模型的一半参数。

2.2. 激活函数

AlexNet将sigmoid激活函数改为更简单的ReLU激活函数。

  1. 一方面,ReLU激活函数的计算更简单,它不需要如sigmoid激活函数那般复杂的求幂运算。
  2. 另一方面,当使用不同的参数初始化方法时,ReLU激活函数使训练模型更加容易。
    当sigmoid激活函数的输出非常接近于0或1时,这些区域的梯度几乎为0,因此反向传播无法继续更新一些模型参数。
    相反,ReLU激活函数在正区间的梯度总是1。

2.3. 容量控制与预处理

AlexNet通过暂退法控制全连接层的模型复杂度,而LeNet只使用了权重衰减。
为了进一步扩充数据,AlexNet在训练时增加了大量的图像增强数据,如翻转、裁切和变色。这使得模型更健壮,更大的样本量有效地减少了过拟合。

代码生成模型架构:

import torch
from torch import nn
from d2l import torch as d2lnet = nn.Sequential(#开始使用一个11×11的卷积窗口来捕获对象,同时步幅为4,以减少输出的宽度和高度nn.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),#使用3个连续的卷积层和较小的卷积窗口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(),#这里,全连接层的输出数量太多,使用暂退层来缓解过拟合nn.Linear(6400,4096),nn.ReLU(),nn.Dropout(p=0.5), #有50%的概率在训练过程中将特征随机置为0nn.Linear(4096,4096),nn.ReLU(),nn.Dropout(p=0.5),#最后的输出层,因为我们使用的是Fashion-MNIST,所以类别数为10,而非论文中的1000nn.Linear(4096,10)
)
#构造一个高度和宽度都为224的单通道数据,来观察每一层输出的形状
X = torch.randn(1,1,224,224)
for layer in net:X = layer(X)print(layer.__class__.__name__,"输出形状为:\t", X.shape)#结果:
Conv2d 输出形状为:	 torch.Size([1, 96, 54, 54])
ReLU 输出形状为:	 torch.Size([1, 96, 54, 54])
MaxPool2d 输出形状为:	 torch.Size([1, 96, 26, 26])
Conv2d 输出形状为:	 torch.Size([1, 256, 26, 26])
ReLU 输出形状为:	 torch.Size([1, 256, 26, 26])
MaxPool2d 输出形状为:	 torch.Size([1, 256, 12, 12])
Conv2d 输出形状为:	 torch.Size([1, 384, 12, 12])
ReLU 输出形状为:	 torch.Size([1, 384, 12, 12])
Conv2d 输出形状为:	 torch.Size([1, 384, 12, 12])
ReLU 输出形状为:	 torch.Size([1, 384, 12, 12])
Conv2d 输出形状为:	 torch.Size([1, 256, 12, 12])
ReLU 输出形状为:	 torch.Size([1, 256, 12, 12])
MaxPool2d 输出形状为:	 torch.Size([1, 256, 5, 5])
Flatten 输出形状为:	 torch.Size([1, 6400])
Linear 输出形状为:	 torch.Size([1, 4096])
ReLU 输出形状为:	 torch.Size([1, 4096])
Dropout 输出形状为:	 torch.Size([1, 4096])
Linear 输出形状为:	 torch.Size([1, 4096])
ReLU 输出形状为:	 torch.Size([1, 4096])
Dropout 输出形状为:	 torch.Size([1, 4096])
Linear 输出形状为:	 torch.Size([1, 10])

手写计算:

在这里插入图片描述

2.4. 训练模型

将AlexNet直接应用于Fashion-MNIST的一个问题是,[Fashion-MNIST图像的分辨率](28×28像素)
(低于ImageNet图像。) 为了解决这个问题,(我们将它们增加到224×224)
(通常来讲这不是一个明智的做法,但在这里这样做是为了有效使用AlexNet架构)

#读取数据集
batch_size = 128
train_iter,test_iter = d2l.load_data_fashion_mnist(batch_size,resize=224)#训练
lr,num_epochs = 0.01,10
d2l.train_ch6(net,train_iter,test_iter,num_epochs,lr,d2l.try_gpu())d2l.plt.show()#结果:
loss 0.328, train acc 0.879, test acc 0.870
26.0 examples/sec on cpu

在这里插入图片描述


总结

AlexNet的架构与LeNet相似,但使用了更多的卷积层和更多的参数来拟合大规模数据集。虽然它已经被更有效的架构所超越,但它是从浅层网络到深层网络的关键一步。
Dropout、ReLU和预处理是提升计算机视觉任务性能的其他关键步骤。

是以圣人不行而知,不见而明,不为而成。

–2023-10-14 进阶篇

相关文章:

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

深度学习——深度卷积神经网络(AlexNet) 文章目录 前言一、学习表征二、AlexNet实现2.1. 模型设计2.2. 激活函数2.3. 容量控制与预处理2.4. 训练模型 总结 前言 在前面学习了卷积神经网络的基本原理,之后将继续学习现代卷积神经网络架构。而本章将学习其…...

提高编程效率-Vscode实用指南

您是否知道全球73%的开发人员依赖同一个代码编辑器? 是的,2023 年 Stack Overflow 开发者调查结果已出炉,Visual Studio Code 迄今为止再次排名第一最常用的开发环境。 “Visual Studio Code 仍然是所有开发人员的首选 IDE,与专业…...

ES 数据库

ES 数据库 通过 API 查询通过 JSON 查询 熟悉 es 的同学都知道 es 一般有两种查询方式 1,在 java 中构建查询对象,调用 es 提供的 api 做查询 2,使用 json 调用接口做查询 查询语句无非是将足够的信息丢给数据库,但是它却和 SQL …...

面试经典150题——Day14

文章目录 一、题目二、题解 一、题目 134. Gas Station There are n gas stations along a circular route, where the amount of gas at the ith station is gas[i]. You have a car with an unlimited gas tank and it costs cost[i] of gas to travel from the ith stati…...

Pika v3.5.1发布!

Pika 社区很高兴宣布,我们今天发布已经过我们生产环境验证 v3.5.1 版本,https://github.com/OpenAtomFoundation/pika/releases/tag/v3.5.1 。 该版本不仅做了很多优化工作,还引入了多项新功能。这些新功能包括 动态关闭 WAL、ReplicationID…...

Kotlin中的数组

数组是一种常见的数据结构,用于存储相同类型的多个元素。在 Kotlin 中,我们可以使用不同的方式声明、初始化和操作数组。 在 Kotlin 中,有多种方式可以定义和操作数组。我们将通过以下示例代码来展示不同的数组操作: fun main()…...

(3) OpenCV图像处理kNN近邻算法-识别摄像头数字

目录 一、代码简介 二、程序代码 三、使用的图片资源 1、图片digits.png...

上海亚商投顾:沪指震荡调整 转基因概念股逆势大涨

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日低开低走,深成指、创业板指均跌超1%,双双创出年内新低。转基因概念股逆势大涨…...

abap中程序跳转(全)

1.常用 1.CALL TRANSACTION 1.CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK [AND SKIP FIRST SCREEN]. 其中ta为事务码tcode使用时要打单引号() 2. CALL TRANSACTION ta WITH|WITHOUT AUTHORITY-CHECK USING bdc_tab { {[MODE mode] [UPDATE u…...

启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析

作者:华钟明 文章摘要: 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分: -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…...

PCB命名规则-allegro

PCB命名规则-allegro 一、焊盘命名规则 1、 贴片矩形焊盘 命名规则:SMD长(L)宽(W)(mil) 举例:SMD90X60 2、 贴片圆焊盘 命名规则:SMDC焊盘直径(D&…...

[架构之路-240]:目标系统 - 纵向分层 - 应用层 - 应用层协议与业务应用程序的多样化,与大自然生物的丰富多彩,异曲同工

目录 前言: - 倒金子塔结构 - 大自然的组成 一、应用层在计算机系统中的位置 1.1 计算机应用程序的位置 1.1.1 业务应用程序概述 1.1.2 应用程序的分类 - 按照计算机作用范围 1.1.3 业务应用程序分类 - 按照行业分类 1.2 网络应用协议的位置 1.2.1 网络协…...

探索数字时代的核心:服务器如何塑造未来并助你成就大业

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

spring6-资源操作:Resources

资源操作:Resources 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteAr…...

C语言 内存

内存分配 内存分配的类型 C/C中内存分为5个区,分别为栈区、堆区、全局/静态存储区、常量存储区、代码区 静态内存分配:编译时分配,包括全局、静态全局、静态局部三种变量。 动态内存分配:运行时分配,包括栈&#x…...

Java设计模式之备忘录模式

备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象内部状态的情况下捕获和恢复对象的内部状态。该模式通过在对象之外保存和恢复对象的状态,使得对象可以在需要时回滚到之前的状态。 在备忘录模式中&#xff…...

深度学习 | Pytorch深度学习实践

一、overview 基于pytorch的深度学习的四个步骤基本如下: 二、线性模型 Linear Model 基本概念 数据集分为测试集和训练集(训练集、开发集)训练集(x,y)测试集只给(x)过拟合&#xf…...

Elasticsearch7.9.3保姆级安装教程

Linux版本Elasticsearch版本(待安装)Kibana版本(待安装)CentOS 77.9.37.9.3 一、下载地址 1、官网下载 打开地址 https://www.elastic.co/cn/downloads/past-releases#elasticsearch,按如图所示选择对应版本即可 2、采用wget下载 为了不必要的麻烦,建…...

深入使用探讨 PuppeteerSharp 抓取 LinkedIn 页面的步骤

LinkedIn是全球最大的职业社交平台之一,拥有大量的用户和企业信息。用户可以在上面建立个人职业资料、与其他用户建立联系、分享职业经验和获取行业动态。由于其庞大的用户群体和丰富的数据资源,开发者们对于获取LinkedIn数据的需求日益增长。 Puppeteer…...

联合体(共用体)

1. 联合类型的定义 联合也是一种特殊的自定义类型。 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间。 2.联合大小的计算 联合的大小 至少是最大成员的大小 。 当最大成员大小不是最大对齐数的整数倍的时候,就要对 齐到最大对齐数…...

从零开始:GitFlow详细教程,轻松掌握分支策略

前序 GitFlow是一种用于管理Git仓库中软件开发工作流程的模型,它提供了一种结构化的方法来处理特性开发、版本发布和维护。下面是一个详细的GitFlow教程,帮助你了解GitFlow的基本概念和使用方法。 安装GitFlow 首先,确保你已经安装了Git。…...

深度学习硬件介绍

目录 1. 深度学习电脑选型1.1 深度学习常用框架1.2 深度学习硬件选择1.3 GPU 厂商介绍科普 你真的需要这么一块阵列卡 1. 深度学习电脑选型 1.1 深度学习常用框架 常见的深度学习框架:百度的飞桨框架、Google 的TensorFlow,伯克利亚学院的Caffe&#x…...

利用向导创建MFC

目录 1、项目的创建: 2、项目的管理 : 3、分析以及生成的项目代码 : (1)、查看CFrame中的消息映射宏 (2)、自动生成事件 (3)、在CFrame中添加对应的鼠标处理函数 …...

MySQL 8.0 OCP认证精讲视频、环境和题库之五 事务、缓存

redo log buffer: 缓存与事务有关的redo log ,用来对mysql进行crash恢复,不可禁用; 日志缓冲区是存储要写入磁盘上日志文件的数据的内存区域。日志缓冲区大小由innodb_Log_buffer_size变量定义。 默认大小为16MB。日志缓冲区的内容会定…...

ACL配置

目录 1.使用基本ACL配置交换telnet访问的权限 2.使用高级ACL配置流分类实现限制互访某一台服务器 3.使用二层ACL配置流分类拒绝指定报文通过 4.通过流策略实现策略路由(重定向到不同的下一跳) 5.通过流策略实现不同网段间限制互访 6.通过流策略实现限速功能 7.通过流策略…...

微信小程序修改van-popup的背景颜色

效果图&#xff1a; van-popup背景颜色渐变 使用深度修改样式不生效&#xff0c;直接在 custom-style里面修改即可&#xff1b; <van-popup position"bottom"custom-style"height:25%;background:linear-gradient(95deg, #F8FCFF -0.03%, #EDF5FF 64.44…...

SpringCloud-Nacos

一、介绍 &#xff08;1&#xff09;作为服务注册中心和配置中心 &#xff08;2&#xff09;等价于&#xff1a;EurekaConfigBus &#xff08;3&#xff09;nacos集成了ribbon&#xff0c;支持负载均衡 二、安装 &#xff08;1&#xff09;官网 &#xff08;2&#xff09; …...

动态规划12(Leetcode221最大正方形)

代码&#xff1a; class Solution {public int maximalSquare(char[][] matrix) {int m matrix.length;int n matrix[0].length;int[][]area new int[m][n];area[0][0] matrix[0][0];int max 0;for(int i0;i<m;i){area[i][0] matrix[i][0]1? 1:0;max Math.max(area…...

【Git】bad signature 0x00000000 index file corrupt. fatal: index file corrupt

问题描述 电脑写代码时蓝屏。重启后 git commit 出错。 error: bad signature 0x00000000 fatal: index file corrupt原因分析 当电脑发生蓝屏或异常关机时&#xff0c;Git 的索引文件可能损坏。 解决方案 删除损坏的索引文件。 rm -Force .git/index回退到上一个可用的版…...

GO 语言的函数??

函数是什么&#xff1f; 学过编程的 xdm 对于函数自然不会陌生&#xff0c;那么函数是什么呢&#xff1f; 函数是一段可以重用的代码块&#xff0c;可以被多次调用&#xff0c;我们可以通过使用函数&#xff0c;提高咱们代码代码的模块化&#xff0c;提高程序的可读性和可维护…...

无锡建设网站/疫情最新资讯

CefSharp在NuGet的简介是“The CefSharp Chromium-based browser component”&#xff0c;机翻的意思就是“基于Cefsharp Chromium的浏览器组件” 请注意本文不会有太多功能的详细介绍&#xff0c;只有实现相关需求的基本功能 请注意本次使用CefSharp版本为57.0.0&#xff0c;最…...

做ppt模板网站/百度百科入口

http://rcv.kaist.ac.kr/~ail/...

开不锈钢公司怎么做网站/浙江网站seo

目录 1、什么是事务&#xff1f; 2、事务的几个特性&#xff08;ACID&#xff09; 2.1、原子性(Atomicity) 2.2、一致性(Consistency) 2.3、隔离性(Isolation) 2.4、持久性(Durability) 3、MySQL中事务操作 3.1、隐式事务 3.2、显式事务 2.3、savepoint关键字 2.4、…...

网站用图片做背景图片/石家庄百度搜索引擎优化

C语言简介&#xff1a;BCPL->newB->C->UNIX->Linux->gccC语言专门编写操作系统的语言&#xff0c;所以天生适合对硬件编程&#xff0c;也以运行速度快著称&#xff0c;也非常适合实现数据结构和算法。由于出现时间过早&#xff0c;有很多缺陷&#xff0c;也没想…...

机械网站案例/百度搜索网页

大家好&#xff0c;我是煎鱼。最近我有一个朋友公司踩了不少消息队列&#xff08;MQ&#xff09;的坑&#xff0c;让人无奈不已。因此计划写 MQ 系列的技术文章&#xff0c;来科普更多这块的知识。目前 MQ 也是互联网应用中非常常用的基础组件了&#xff0c;面试特爱问。基本有…...

教程建设网站/线上招生引流推广方法

Arduino IDE作为一种开源硬件开发软件工具&#xff0c;目前拥有很好的应用生态和众多的用户&#xff0c;本文介绍Wio RP2040无线WiFi迷你开发板Arduino IDE环境安装与设置&#xff0c;并给出采用Arduino C控制Wio RP2040开发板板载LED和扩展一只LED发光的程序示例。 本文动手实…...