AlexNet架构解析

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

参考论文: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+2padding-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).

目录
相关文章
|
14天前
|
运维 负载均衡 微服务
|
2月前
|
人工智能 JavaScript 前端开发
LangGraph架构解析
本文深入解析了传统Agent开发的三大痛点:状态管理碎片化、流程控制复杂及扩展性差,提出使用LangGraph通过有向图模型重构工作流,将LLM调用与工具执行抽象为节点,实现动态流程跳转。文中详述LangGraph四大核心组件——状态机引擎、节点设计、条件边与工具层集成,并结合生产环境最佳实践,如可视化调试、状态持久化与人工干预机制,最终对比LangGraph与传统方案的性能差异,给出选型建议。
263 0
|
3天前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
99 6
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
5天前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
21天前
|
机器学习/深度学习 负载均衡 网络架构
Mixture of Experts架构的简要解析
Mixture of Experts(MoE)架构起源于1991年,其核心思想是通过多个专门化的“专家”网络处理输入的不同部分,并由门控网络动态组合输出。这种架构实现了稀疏激活,仅激活部分专家,从而在模型规模与计算成本之间取得平衡。MoE的关键在于门控机制的设计,如线性门控、噪声Top-K门控等,确保模型能根据输入特征自适应选择专家。
132 8
|
21天前
|
JSON 供应链 监控
1688商品详情API技术深度解析:从接口架构到数据融合实战
1688商品详情API(item_get接口)可通过商品ID获取标题、价格、库存、SKU等核心数据,适用于价格监控、供应链管理等场景。支持JSON格式返回,需企业认证。Python示例展示如何调用接口获取商品信息。
|
21天前
|
机器学习/深度学习 存储 资源调度
Transformer架构的简要解析
Transformer架构自2017年提出以来,彻底革新了人工智能领域,广泛应用于自然语言处理、语音识别等任务。其核心创新在于自注意力机制,通过计算序列中任意两个位置的相关性,打破了传统循环神经网络的序列依赖限制,实现了高效并行化与长距离依赖建模。该架构由编码器和解码器组成,结合多头注意力、位置编码、前馈网络等模块,大幅提升了模型表达能力与训练效率。从BERT到GPT系列,几乎所有现代大语言模型均基于Transformer构建,成为深度学习时代的关键技术突破之一。
237 7
|
2月前
|
消息中间件 缓存 Java
医院信息系统(HIS)的开发架构解析,代码示例
医院信息系统(HIS)是现代医院的核心,其架构设计直接影响系统稳定性、扩展性与用户体验。本文解析HIS架构演进历程,从单机、C/S、B/S到微服务与云原生架构,结合代码示例,深入讲解现代HIS系统的分层架构、核心模块与关键技术实践。
342 1
|
14天前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
266 0

热门文章

最新文章

推荐镜像

更多
  • DNS