揭秘 DCNN——AlexNet

news2024/11/18 5:35:05

来源 — gifs.com

一、说明 

        还记得 2012 年的 ImageNet 视觉识别挑战赛吗?当然,你知道!经过大量的反复试验和实验,研究员 Alex Krizhevsky 及其合著者 Ilya Sutskever 和 Geoffrey E. Hinton(他真正理解了深度学习中的“深度”)引入了 AlexNet 架构,该架构以第一作者的名字命名,并赢得了 ImageNet 挑战赛,从而开创了利用深度卷积神经网络进行物体检测的深度迁移学习的新时代!

        在这篇博客中,我们将揭开 AlexNet 论文的神秘面纱并深入讨论其架构,然后亲自实践我们所学到的知识!

二、预备知识⏮️

        本文假设您非常了解 -

  1. 卷积运算
  2. 最大池化、步幅、内核、填充
  3. 神经网络 (CNN) 和激活函数(Softmax、ReLU)
  4. CNN(卷积神经网络) 

如果您已经了解先决条件,请跳过此部分

让我附上一些我学习深度学习基础知识的资源,以帮助您。

  1. 卷积运算——看这个
  2. 卷积神经网络 —观看此内容
  3. 要学习激活函数,请访问我的博客

三、破解八层神兽🤖

        为了更容易理解复杂的架构,我绘制了一个更容易理解的模型架构。在整个博客中仔细遵循架构!

        AlexNet 架构简化(来源-作者)

        让我们把它分解并逐步理解架构——

  1. 从上面绘制的架构中,观察224 x 224 维度以及 3 个通道(红色 (R)、绿色 (G) 和蓝色 (B))的 RGB 图像。它代表任何彩色图像,因此代表我们的输入。
  2. 第 1 层- 在第一层中,我们应用步幅大小为 4 的卷积运算,并具有 96 个大小为 11 x 11 的内核。应用这些操作时,会生成 96 个大小为 55 x 55 的图像(因为我们的内核有 96 个通道) )。这只是一个 3D 张量。
  3. 然后我们应用内核大小为 3x3 且步幅大小为 2 的最大池化。这会生成大小为 27x27、具有 96 个通道的图像。
  4. 第 2 层- 在 AlexNet 的第 2 层中,我们再次应用卷积以及使用 256 个大小为 5x5 的内核进行填充。请注意,我在图中的卷积旁边提到了“相同”。填充中的SAME意味着过滤器将应用于输入的所有元素,并且在模型训练阶段应将填充设置为 SAME。这可确保输出尺寸与输入尺寸相同。这再次产生大小为 27 x 27 的 3D 张量,具有 256 个这样的通道。
  5. 再次,我们应用内核大小为 3x3 的最大池层和大小为 2 的步长,就像我们在第 1 层之后所做的那样。这会生成大小为 13x13、具有 256 个通道的图像。
  6. 第 3 层- 在 AlexNet 的第 3 层中,我们再次应用具有相同填充(如第 2 层中所述)的卷积,其中包含 384 个大小为 3x3 的内核。这会产生大小为13x13、具有 384 个通道的 3D 张量。
  7. 第 4 层- 在第 4 层中,我们应用具有相同填充的卷积,其中包含 384 个大小为 3x3 的内核。这再次产生大小为13x13、具有 384 个通道的 3D 张量。
  8. 第 5 层- 在第 5 层中,我们应用具有相同填充的卷积,其中包含 256 个大小为 3x3 的内核。这再次产生大小为13x13、具有 256 个通道的 3D 张量。
  9. 现在我们再次应用步幅大小为 2 的最大池和 3x3 最大池过滤器(内核)。这会生成尺寸为 6x6、具有 256 个通道的图像。
  10. 第 6,7,8 层 -在 6x6x256 (= 9216) 3D 张量上应用展平操作(尺寸的简单乘积)时,我们只需得到 2 个完全连接的层,然后是最终的 softmax 层来输出我们的类。(请注意,该图有 1000 个输出类,因为它用于对 ImageNet 问题进行分类,该问题有 1000 个类需要识别)

因此,基本上,AlexNet 有 5 个卷积层,后跟 2 个全连接层,最后是用于生成输出的 Softmax 层。

四、为什么 AlexNet 如此酷?!

咬碎纸……

        让我们讨论一些即使在今天也广泛用于深度学习和目标检测的最重要的概念,这些概念在AlexNet论文中介绍过——

  1. AlexNet 论文是第一篇使用强大的非线性激活函数ReLU概念的论文。
  2. Dropout用于防止过度拟合并确保模型在学习中的稳健性和泛化性。
  3. 数据增强用于将数据转换为各种形式(水平/垂直翻转、旋转等),以增强训练数据的多样化。
  4. 使用多个 GPU来训练模型以获得良好的性能指标。

除此之外,AlexNet 论文还使用了一个名为“局部响应归一化”(LRN)的概念,该概念虽然作为一个概念值得注意,但已被“批量归一化”等先进技术进一步取代。

        就我个人而言,我在解决深度学习问题时确实更喜欢批量归一化,但 LRN 的概念是如此美丽,以至于我在研究 AlexNet 论文时无法跳过它。

五、LRN 将神经科学与人工智能连接起来🔮🪄

        我们知道,在使用任何激活函数之前,神经网络的隐藏层希望我们将高维数据归一化为零均值和单位方差,以正确地对数据进行建模。标准化会转换数据集中列的值并对其进行缩放,而不会扭曲值范围的差异或丢失信息。

        使用ReLU之后,即f(x)=max(0,x),你会发现使用ReLU之后得到的值没有像tanh和sigmoid函数那样的范围。因此,ReLU 之后必须进行归一化。研究人员在 AlexNet 论文中提到了一种名为“局部响应归一化”的方法,这对我来说似乎相当有趣,因为它是受到神经科学中一个名为“横向抑制”的重要概念的启发,该概念讨论了活跃神经元对其的作用。周围神经元对特定刺激做出反应。

        假设您已经了解 ReLU 的工作原理,则数据应在 0 和 1 之间标准化,因为在 ReLU 理论中任何 <0 的值都是 0。对于像 ReLU 这样的无界函数(没有最大值),LRN 用于标准化 ReLU 给出的无界激活。

您会惊讶地发现人工神经网络中的 LRN 概念改编自称为横向抑制的神经科学概念。

横向抑制涉及通过兴奋神经元来抑制远处的神经元。

        在我们的中枢神经系统中,兴奋或受刺激的神经元往往会抑制远处神经元的活动,这有助于增强我们的感官知觉(回想一下,当您的注意力集中在目标物体上时,您仍然可以模糊地识别周围环境 - 您仍然可以感知周围的环境)树,同时看着鸟)。这种视觉抑制反过来又增强了视觉图像的感知和对比度。它有助于改善我们观看时的视力和视力(以及听觉、嗅觉等)!

        但是,LRN 与横向抑制有何关联?

来源——作者

        局部响应归一化也是一个涉及卷积神经网络输入特征(特征图)对比度增强的过程。LCN 在特征图(图像)的局部邻域中执行,考虑到每个像素。

        总体概念是增强输入图像或特征图上的“峰值”并抑制“平坦”响应,因为峰值与目标对象或刺激的存在呈正相关,而不是平坦但高频的响应,而不会给出许多数据涉及物体或刺激是否实际存在。因此,LRN 增加了神经感觉对所需刺激的敏感性。

        综上所述,我们可以推断,如果与目标对象/刺激(峰值)存在强相关性,则图像的该局部块(或邻域)中的神经元之间的模拟使得强相关性将抑制弱相关性,从而提升峰值。但如果存在平坦但强的相关性,那么每个强相关性将几乎同等地相互抑制,从而使整个邻域受到阻尼

LRN 过程因此增强了对象检测和识别。

LRN 概念被即将到来的层和批量标准化概念所掩盖(它的影响很小),它标准化特征图的整个层或创建小批量的特征图并标准化每个批次,并且在几乎所有情况下都工作得很好到目前为止的每个神经网络。

至此,我们基本上就完成了研究论文。现在让我们进入有趣的部分。

六、AlexNet 的实践实现👩🏼‍💻

        只需查看架构,我们就可以轻松编写 AlexNet 的架构。下面是相同的代码 -

#import dependencies
import tensorflow as tf
tf.__version__
'2.2.0'
import tensorflow.keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout, Flatten,Conv2D, MaxPooling2D,BatchNormalization

#Create a sequential model
model = Sequential()

# 1st Convolutional Layer
model.add(Conv2D(filters=96, input_shape=(227,227,3), kernel_size=(11,11),\
 strides=(4,4), padding='valid'))
model.add(Activation('relu'))
# Pooling 
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))
# Batch Normalisation before passing it to the next layer
model.add(BatchNormalization())

# 2nd Convolutional Layer
model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding='valid'))
model.add(Activation('relu'))
# Pooling
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))
# Batch Normalisation
model.add(BatchNormalization())

# 3rd Convolutional Layer
model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(Activation('relu'))
# Batch Normalisation
model.add(BatchNormalization())

# 4th Convolutional Layer
model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(Activation('relu'))
# Batch Normalisation
model.add(BatchNormalization())

# 5th Convolutional Layer
model.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding='valid'))
model.add(Activation('relu'))
# Pooling
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='valid'))
# Batch Normalisation
model.add(BatchNormalization())

# Passing it to a dense layer
model.add(Flatten())
# 1st Dense Layer
model.add(Dense(4096, input_shape=(224*224*3,)))
model.add(Activation('relu'))
# Add Dropout to prevent overfitting
model.add(Dropout(0.4))
# Batch Normalisation
model.add(BatchNormalization())

# 2nd Dense Layer
model.add(Dense(4096))
model.add(Activation('relu'))
# Add Dropout
model.add(Dropout(0.4))
# Batch Normalisation
model.add(BatchNormalization())

# 3rd Dense Layer
model.add(Dense(1000))
model.add(Activation('relu'))
# Add Dropout
model.add(Dropout(0.4))
# Batch Normalisation
model.add(BatchNormalization())

# Output Layer
model.add(Dense(17))
model.add(Activation('softmax'))

model.summary()
 

七、结论 

        希望您在学习 AlexNet 过程中获得乐趣!如果您希望我介绍任何其他神经网络架构或研究论文,请在评论中告诉我!

就这样吧!传奇的 AlexNet 触手可及!

八、参考资料 

我使用了以下资源并附加了链接,以供参考-

  1. AlexNet 论文 (2012)
  2. 横向抑制
  3. LRN

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

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

相关文章

Windows没有USB启动选项很常见,但解决方法更常见

当试图在计算机上重新安装Windows 11/10操作系统,或从安装介质启动时,一些用户看到错误–系统没有任何USB启动选项,请在启动管理器菜单中选择其他启动选项。此错误出现在不同OEM的多个设备,原因包括启用了安全引导、禁用了Legacy/CSM支持、联想服务引擎、未正确制作可引导U…

万宾科技智能传感器EN100-C2有什么作用?

在日常生活中井盖是一种常见的城市设施&#xff0c;但井盖出现问题可能会对人们的生活造成什么影响呢&#xff1f;移位或老化的井盖可能会威胁人们的安全&#xff0c;同时也会影响城市生命线的正常运行。然而智能井盖的出现为解决这些问题提供了有效的应对方案。 WITBEE万宾智能…

Day44 力扣动态规划 : 300.最长递增子序列|674. 最长连续递增序列 | 718. 最长重复子数组

Day44 力扣动态规划 : 300.最长递增子序列&#xff5c;674. 最长连续递增序列 &#xff5c; 718. 最长重复子数组 300.最长递增子序列第一印象看完题解的思路dp递推公式遍历顺序初始化 实现中的困难感悟代码 674. 最长连续递增序列第一印象dp状态转移公式遍历顺序初始化 看完题…

能够定时发送朋友圈的软件

此款软件提供便捷的网页端登录方式&#xff0c;让您轻松管理多个账号&#xff0c;实现多账号聚合管理&#xff0c;只需一个界面即可解决所有问题。 朋友圈内容编辑功能强大&#xff0c;让您在输入框内输入文本内容&#xff0c;点击表情图标选择表情&#xff0c;还能通过“”图标…

Go利用反射实现一个ini文件的解析器程序

package mainimport ("bufio" // 逐行读取配置文件"fmt""log""os""reflect""strconv""strings" )type Config struct { // 定义配置结构体Section1 Section1 ini:"section1" // 嵌套结构体1…

洗地机哪个牌子最好用?洗地机怎么选?2023洗地机选购推荐

家里有小孩或者是养有宠物的都有一个深刻的体验&#xff0c;那就是房子每天都很乱&#xff0c;隔三岔五就得做一次卫生清理、地板杀菌等。如果是房屋面积太大的话&#xff0c;只靠自己手动清洁是非常的耗时间并且还很劳累。洗地机的出现可谓是造福人类&#xff0c;解脱了家庭劳…

EM@一次双绝对值不等式

文章目录 一次双绝对值不等式求解步骤去绝对值情况分析&#x1f47a;例例代数法几何方法比较 例 一次双绝对值不等式求解步骤 设 f ∣ f 1 ∣ ∣ f 2 ∣ f|f_1||f_2| f∣f1​∣∣f2​∣, f 1 , f 2 f_1,f_2 f1​,f2​都是一次多项式,则原不等式 f ⩾ a f\geqslant{a} f⩾a或 …

跨越编程界限:C++到JavaSE的平滑过渡

JDK安装 安装JDK 配置环境变量&#xff1a; Path 内添加 C:\Program Files\Java\jdk1.8.0_201\bin 添加 JAVA_HOME C:\Program Files\Java\jdk1.8.0_201 添加 CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar 第一个Java程序 HelloWorld.java public class…

记录--让我们来深入了解一下前端“三清”是什么

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前端“三清” 在前端开发中&#xff0c;我们经常听到关于“三清”的说法&#xff0c;即 window、document、Object。这三者分别代表了 BOM(浏览器对象模型)、DOM(文档对象模型)以及 JS 的顶层对象。在…

Git精讲(一)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、Git初识1、提出问题2、如何解决--版本控制器3、注意事项 二、Git 安装1、Linux-centos2、…

世微 升压恒压IC dc-dc转换器 充电器手持设备便携式产品 AP8660

AP8660是一款升压dc-dc转换器&#xff0c;内置MOS调节器&#xff0c;内部补偿&#xff0c;还可以最小6个外部组件&#xff0c;内部的软识启动功能可以降压涌入电流 AP8660 SOT23-6封装&#xff0c;可以为PCB提供节省空间 特点 可调输出&#xff0c;最高达到24W 内部固定PWM频…

语言大模型的预训练过程——从无尽数据到海量知识

从目前研究结果看&#xff0c;Transformer是足够强大的特征抽取器&#xff0c;通过预训练过程&#xff0c;Transformer学到了什么&#xff1f;知识是如何存取的&#xff1f;我们又如何修正错误知识&#xff1f;本文讲述这方面的研究进展。 1、求知&#xff1a;LLM学到了什么知…

【JAVA】去掉 if...else 的七种绝佳之法...

文章目录 前言方法一&#xff1a;提前 return方法二&#xff1a;枚举方案三&#xff1a;Optional 判空方案四&#xff1a;表驱动法方案五&#xff1a;策略模式 工厂方法方案六&#xff1a;责任链模式方案七&#xff1a;Function总结 前言 我相信小伙伴一定看过多篇怎么去掉 i…

解决渗透测试js文件泄露

解决办法&#xff1a;使用过滤器过滤 public class StaticSourceFilter implements Filter {private static Logger logger LoggerFactory.getLogger(StaticSourceFilter.class);Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepub…

http-server安装使用

前段时间给电脑重装了系统&#xff0c;很多东西都没了&#xff0c;今天想在浏览器打开一个本地的html文件&#xff0c;发现电脑上没有http-server&#xff0c;于是装了一个&#xff0c;并且记录下安装过程 1、安装 nodejs&#xff0c;但如果你电脑上有&#xff0c;就无需下载 …

html5 初步了解

1、html5 含义 简而言之&#xff0c;html5 其实就是新的一代html标准&#xff01; 2、html5的优缺点 优点 语义化html 增加了很多语义化的标签&#xff0c;让html结构更加清晰&#xff0c;更具可读性由于增加了很多语义化的标签&#xff0c;对SEO更加友好 缺点 其他主流浏…

day59【单调栈】503.下一个更大元素Ⅱ 42.接雨水

文章目录 503.下一个更大元素Ⅱ42.接雨水 503.下一个更大元素Ⅱ 力扣题目链接 代码随想录讲解链接 题意&#xff1a;给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数…

(只需三步)虚拟机上vm的ubuntu不能联上网怎么办

第一步&#xff1a;重启虚拟网络适配器 第二步&#xff1a;删掉网络适配器&#xff0c;重新添加 第三步&#xff1a;重启虚拟机网络服务器 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start 再打…

【机器学习基础】机器学习入门(2)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a;【机器学习基础】机器学习入门&#xff08;1&#xff09; &#x1f4a1;…

【算法|动态规划 | 区间dp No.1】AcWing 282. 石子合并

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…