AlexNet架构解析

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: AlexNet是2012年ImageNet图像分类竞赛的冠军,首次将卷积神经网络CNN和深度学习用于大规模图像分类并且性能优异,在今天也具有一定的参考价值。

@toc

参考论文:ImageNet classification with deep convolutional neural networks

作者:Alex KrizhevskyIlya SutskeverGeoffrey E. Hinton(AI教父,2019图灵奖得主)

  AlexNet是2012年ImageNet图像分类竞赛的冠军,首次将卷积神经网络CNN和深度学习用于大规模图像分类并且性能优异,在今天也具有一定的参考价值。

1、网络架构

image-20220811205059678

这里原图中输入图像的大小应该为227*227,作者应该是笔误写成了224*224

$$ feature map尺寸=\frac{Input+2*padding-filter}{stride} +1 =\frac{227+2*0-11}{4}+1 =55 $$

  设计成上图的结构是因为当时算力不够,也没什么好用的深度学习开源框架。他们手上只有两个GTX580的3GB内存的GPU,为了加快模型的训练速度,所以将模型分为两个部分。一个GPU训练上面的部分,另一个GPU训练下面的部分。

  若在不改变模型结构的条件下,放在今天的软硬件条件下,AlexNet会被设计成如下结构:

image-20220811205605423

  图中的 s 表示 stride,代表步长,s1 代表卷积或池化的步长为 1,s2 代表卷积或池化的 步长为 2,以此类推;fc 表示 fully connected,代表全连接;pool 表示 max pooling,代 表最大池化;conv 表示 convolution,代表卷积;output 表示输出。

  AlexNet 是一个 8 层的网络(卷积层和全连接层中有需要训练的权值,所以这里计算网 络层数的时候只计算卷积层和全连接层),除了最后输出层用的是 softmax 函数以外,其他 层用的都是 ReLU 激活函数。

  AlexNet 是专门为 ImageNet 级别的数据集设计的,一共有 6000 多万个需要训练的参数,参数的数量巨大。

2、计算过程

  第 1 层计算。网络的输入是 227×227 的彩色照片。经过 11×11 步长为 4 的卷积 计算后,得到 96 个 55×55 的特征图。然后再进行 3×3 步长为 2 的最大池化计算,得到 96 个 27×27 的特征图。

  第 2 层计算。使用 5×5,步长为 1 的卷积对 96 个 27×27 的特征图进行特征提取,得到了 256 个 27×27 的特征图。然后再用 3×3 步长为 2 的最大池化计算,得到 256 个 13× 13 的特征图。

  第 3 层计算。使用 3×3,步长为 1 的卷积对 256 个 13×13 的特征图进行特征提取,得到了 384 个 13×13 的特征图。

  第 4 层计算。使用 3×3,步长为 1 的卷积对 384 个 13×13 的特征图进行特征提取,得到了 384 个 13×13 的特征图。

  第 5 层计算。使用 3×3,步长为 1 的卷积对 384 个 13×13 的特征图进行特征提取,得到了 256 个 13×13 的特征图。然后再用 3×3 步长为 2 的最大池化计算,得到 256 个 6×6 的特征图。

  第 6 层计算。把 pool3 的 256 个 6×6 的特征图数据跟 fc1 中的 4096 个神经元进行全连接计算。

  第 7 层计算。把 fc2 的 4096 个神经元跟 fc1 中的 4096 个神经元进行全连接计算。

  第 8 层计算。把 output 的 1000(ImageNet Challenge 比赛有 1000 个分类)个神经元跟 fc2 中的 4096 个神经元进行全连接计算。最后再经过 softmax 计算得到类别的概率值进行输出。

3、AlexNet模型复现

这里使用tensorflow框架对AlexNet架构进行复现
import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import *
from plot_model import plot_model

image_size=227
channel=3
num_classes=1000

inputs=Input(shape=(image_size,image_size,channel))
x=Conv2D(filters=96,kernel_size=(11,11),strides=(4,4),padding='valid',
         activation='relu')(input)
x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
x=Conv2D(filters=256,kernel_size=(5,5),strides=(1,1),padding='same',
         activation='relu')(x)
x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
x=Conv2D(filters=384,kernel_size=(3,3),strides=(1,1),padding='same',
         activation='relu')(x)
x=Conv2D(filters=384,kernel_size=(3,3),strides=(1,1),padding='same',
         activation='relu')(x)
x=Conv2D(filters=256,kernel_size=(3,3),strides=(1,1),padding='same',
         activation='relu')(x)
x=MaxPool2D(pool_size=(3,3),strides=(2,2),padding='valid')(x)
x=Flatten()(x)
x=Dense(4096,activation='relu')(x)
x=Dropout(0.5)(x)
x=Dense(4096,activation='relu')(x)
x=Dropout(0.5)(x)
x=Dense(num_classes,activation='softmax')(x)
model=Model(inputs=inputs,outputs=x)
model.summary()
plot_model(model,to_file='img/AlexNet.png',show_shapes=True)

image-20220811210158569

image-20220811210209416

References

[1] Krizhevsky A , Sutskever I , Hinton G . ImageNet Classification with Deep Convolutional Neural Networks[J]. Advances in neural information processing systems, 2012, 25(2).
目录
相关文章
|
3天前
|
存储 SQL BI
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
深入解析实时数仓Doris:介绍、架构剖析、应用场景与数据划分细节
|
9天前
|
前端开发 JavaScript 测试技术
安卓应用开发中的架构模式解析
【6月更文挑战第21天】在软件开发领域,架构模式是设计优雅、高效、可维护应用程序的基石。本文深入探讨了安卓应用开发中常见的架构模式,包括MVC、MVP、MVVM和Clean Architecture,旨在为开发者提供一个清晰的指导,帮助他们选择最适合自己项目的架构风格。通过对比分析这些架构模式的特点、优势以及适用场景,文章揭示了如何根据项目需求和团队能力来采用恰当的架构模式,以实现代码的可维护性、可扩展性和可测试性。
25 7
|
4天前
|
存储 缓存 监控
深入解析Elasticsearch的内存架构与管理
深入解析Elasticsearch的内存架构与管理
深入解析Elasticsearch的内存架构与管理
|
11天前
|
弹性计算 负载均衡 API
微服务架构下的API网关模式解析
在现代软件工程中,微服务架构因其灵活性和可维护性而受到青睐。本文将探讨API网关模式在微服务架构中的关键角色,分析其设计原则、实现方式及面临的挑战,并结合实际案例阐述如何有效整合API网关以提升系统整体性能和安全性。
|
9天前
|
存储 弹性计算 安全
构建高效企业应用架构:阿里云产品组合实践深度解析
该方案展现了阿里云产品组合的强大能力和灵活性,不仅满足了当前业务需求,也为未来的扩展打下了坚实的基础。希望本文的分享能为读者在设计自己的IT解决方案时提供一定的参考和启发。
108 1
|
1天前
|
存储 前端开发 JavaScript
构建高性能返利App的技术架构解析
构建高性能返利App的技术架构解析
|
2天前
|
网络协议 安全 分布式数据库
技术分享:分布式数据库DNS服务器的架构思路
技术分享:分布式数据库DNS服务器的架构思路
7 0
|
1天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【6月更文挑战第30天】Spring Cloud是Java微服务治理明星框架,整合Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Zuul(API网关)和Config Server(配置中心),提供完整服务治理解决方案。通过Eureka实现服务注册与发现,Ribbon进行负载均衡,Hystrix确保服务容错,Config Server集中管理配置,Zuul则作为API入口统一处理请求。理解和使用Spring Cloud是现代Java开发者的关键技能。
14 2
|
16小时前
|
负载均衡 Java 开发者
Spring Cloud微服务架构中的配置管理与服务发现
Spring Cloud微服务架构中的配置管理与服务发现
|
16小时前
|
Java API 数据库
Java后端架构设计:从单体到微服务的演进
Java后端架构设计:从单体到微服务的演进

推荐镜像

更多