深度学习之视觉特征提取器——AlexNet

AlexNet

参考资料:

(1)ImageNet十年历任霸主之AlexNet - 知乎 (zhihu.com)

(2)AlexNet - Wikipedia

引入

AlexNet在2012年以第一名在Top-1分类精度霸榜ImageNet,并超过第二名近10个百分点,并且值得说明的是,霸榜2013年的ZFNet也就是对AlexNet进行调参后得到了更好的结果。相比于古早的LeNet实现的十分类,AlexNet能够成功进行一千分类并且达到了一个新高度。此外,AlexNet证明了神经网络的深度对模型效果至关重要,并且可以利用GPU大大加速这一过程。AlexNet虽然相比于VGG的热度和知名度没有那么高(值得说明的是已经相当高了),但是个人认为其里程碑的意义要比VGG高。其效果虽然逊于VGG,但是无论是归一化的思想,还是Dropout、ReLU的应用,亦或是深层网络利用GPU加速,为后续各项研究提供了一个很好的研究基础。

模型结构

请添加图片描述

AlexNet 包含八层:前五层是卷积层,其中一些是最大池化层,后三层是全连接层。除最后一层外,网络被拆分为两个部分,每个部分在一个 GPU 上运行。整个结构可以写成:
( C N N → L R N → M P ) 2 → ( C N N 3 → M P ) → ( F C → D O ) 2 → L i n e a r → S o f t m a x (CNN→LRN→MP)^2→(CNN^3→MP)→(FC→DO)^2→Linear→Softmax (CNNLRNMP)2(CNN3MP)(FCDO)2LinearSoftmax
其中各个字母分别代表着:

  • CNN = 卷积层(后面紧接着激活函数 ReLU)
  • LRN = 局部响应归一化(Local Response Normalization)
  • MP = 最大池化(Maxpooling)
  • FC = 全连接层(后面紧接着激活函数 ReLU)
  • 线性 = 全连接层(未激活)
  • DO = 随机丢失(Dropout)

更为详细的结构图如下图所示:

请添加图片描述

Local Response Normalization

请添加图片描述

Local Response Normalization是一种归一化方式,主要针对的是卷积核不同通道上相同位置的参数。用数学公式表示就是:
b x , y i = a x , y i / ( k + α ∑ j = m a x ( 0 , i − n 2 ) j = m i n ( N − 1 , i + n 2 ) a x , y j 2 ) β b^i_{x,y}=a^i_{x,y}/(k+\alpha\sum_{j=max(0,i-\frac{n}{2})}^{j=min(N-1,i+\frac{n}{2})}{a^j_{x,y}}^2)^\beta bx,yi=ax,yi/(k+αj=max(0,i2n)j=min(N1,i+2n)ax,yj2)β
其中 a x , y i a^i_{x,y} ax,yi是第 i i i个卷积核上位置为 ( x , y ) (x,y) (x,y)的输入参数, b x , y i b^i_{x,y} bx,yi是第 i i i个卷积核上位置为 ( x , y ) (x,y) (x,y)的输出参数, N N N是总卷积核的数量, n n n是归一化邻居数量(因为可能不是同时对所有卷积核/通道进行归一化), α , β , k \alpha,\beta,k α,β,k是超参数。在论文中,采用的是𝑘=2, 𝑛=5, 𝛼=0.0001, 𝛽=0.75的值。

这一操作对于像AlexNet这种深层次网络比较必要,因为AlexNet会使用上百个通道,使用这种归一化可以一定程度上帮助模型收敛(类似于数据预处理中的归一化的作用)。从神经科学角度上来看,归一化可以看成是神经元群体之前相互抑制作用。

ReLU

ReLU是由一个分段函数组成的,在自变量小于0的部分恒等于0,在自变量大于0的部分等于自变量,即 R e L U = m a x ( 0 , x ) ReLU=max(0,x) ReLU=max(0,x)。相比于Sigmoid,ReLU更容易收敛,且由于梯度比较容易求(大于0的导数恒为1)。当因变量很大的时候,经过Sigmoid激活后基本都接近于1,导致梯度消失,而ReLU会避免这种情况。

Dropout

Dropout即在训练过程中(注意预测的时候不使用),按照特定概率随机丢失一定的神经元数据,这样可以有效降低过拟合,但是其代价是可能会导致模型收敛的epoch数更多。

实现代码

Pytorch框架中的torchvision库可以很方便的对其进行调用和实现。模型结构如下:

AlexNet(
  (features): Sequential(
    (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
    (1): ReLU(inplace=True)
    (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (4): ReLU(inplace=True)
    (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (7): ReLU(inplace=True)
    (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (9): ReLU(inplace=True)
    (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU(inplace=True)
    (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (avgpool): AdaptiveAvgPool2d(output_size=(6, 6))
  (classifier): Sequential(
    (0): Dropout(p=0.5, inplace=False)
    (1): Linear(in_features=9216, out_features=4096, bias=True)
    (2): ReLU(inplace=True)
    (3): Dropout(p=0.5, inplace=False)
    (4): Linear(in_features=4096, out_features=4096, bias=True)
    (5): ReLU(inplace=True)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
  )
)

值得说明的是,现在Pytorch库中的AlexNet并不是原论文提出的模型,而是一种经过参数调整后效果更好一些的模型。如果要封装成一个类,并控制输出的维度,可以使用如下代码:

import torch.nn as nn
import torchvision.models as models
from torchvision.models.alexnet import AlexNet_Weights

class AlexNet(nn.Module):
    def __init__(self):
        super(AlexNet, self).__init__()
        self.alexnet = models.alexnet(weights=AlexNet_Weights.IMAGENET1K_V1)
        self.dim_feat = 1000
        self.alexnet.classifier[2] = nn.Linear(4096, 1000)

    def forward(self, x):
        output = self.alexnet(x)
        return output

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

On Hold 频发!又3本期刊被标记为On Hold ,大家谨慎投递!

【SciencePub学术】On Hold 频发!小编在查阅资料的时候发现又有3本期刊被标记为On Hold 了,今天小编给大家详细介绍一下这3本期刊。 来源:科睿唯安官网 Results in Physics 1 期刊概况 【期刊简介】IF:5.3,JCR1区&am…

RockChip Android13 NFC SL6320移植

环境:RK3568 Android13 一:驱动移植 1、驱动 将SL6320驱动代码拷贝至kernel-5.10/drivers/misc/sl6320/ 特殊说明:勿将驱动代码放置于kernel-5.10/drivers/nfc/目录下,会导致sl6320驱动生成设备节点时因/dev/nfc节点以创建而加载失败。 2、DTS 本次硬件设计电路走I2C协…

获取京东商品详情,API返回值说明全攻略

京东商品详情API是开发者获取京东平台上商品详细信息的重要工具。通过调用API并解析返回的响应数据,您可以快速获取商品的各项属性,如商品ID、标题、价格、图片等。下面,我们将为您详细介绍京东商品详情API的返回值说明,帮助您更好…

Spring - 8 ( 10000 字 Spring 入门级教程 )

一: MyBatis 1.1 引入 MyBatis 我们学习 MySQL 数据库时,已经学习了 JDBC 来操作数据库, 但是 JDBC 操作太复杂了. 我们先来回顾⼀下 JDBC 的操作流程: 创建数据库连接池 DataSource通过 DataSource 获取数据库连接 Connection编写要执行带 ? 占位符…

三岁孩童被家养大型犬咬伤 额部撕脱伤达10公分

近期,一名被家养大型犬咬伤了面部的3岁小朋友,在被家人紧急送来西安国际医学中心医院,通过24小时急诊门诊简单救治后,转至整形外科,由主治医师李世龙为他实施了清创及缝合手术。 “患者额部撕脱伤面积约为10公分&…

什么是高级持续威胁(APT)

高级持续性威胁(Advanced Persistent Threat,APT),又叫高级长期威胁,是一种复杂的、持续的网络攻击,包含三个要素:高级、长期、威胁。 【高级】是指执行APT攻击需要比传统攻击更高的定制程度和…

【教程】极简Python接入免费语音识别API

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,请不吝给个[点赞、收藏、关注]哦~ 安装库: pip install SpeechRecognition 使用方法: import speech_recognition as srr sr.Recognizer() harvard sr…

省公派出国|社科类普通高校教师限期内赴英国访学交流

在国外访问学者申请中,人文社科类相对难度更大,尤其是英语语言学,作为非母语研究并不被国外高校看重。经过努力,最终我们帮助Z老师申请到英国坎特伯雷基督教会大学的访学职位,并在限期内出国。 Z老师背景: …

如何在 Windows 11 上检查和显示 CPU 温度

1.为什么需要监控 CPU 温度? CPU 是您计算机的核心,是从后台运行整个节目的木偶大师,接收指令并处理保持整个 shindig 运行所需的处理能力。并且需要定期监测其内部温度,以确保节目不会着火。高于平均水平的热量总是会导致性能急…

jenkins常用插件之Filesystem Trigger

安装插件 Filesystem Trigger 项目配置 验证 根据上述配置,当1.txt文件发生变化时,jenkins每分钟会进行检测,检测到后即进行任务构建,后续的具体操作可自行配置

css响应式布局左、右上、右中布局

一、布局效果 二、布局代码 <div class"parent"><div class"left">菜单</div><div class"right"><div class"right-top">顶部导航</div><div class"right-content"></div>…

SpringBoot集成阿里云短信验证码服务

一&#xff1a;前言 最近在项目开发过程中&#xff0c;需要去写一个发送手机短信验证码的功能。在网上查了一下&#xff0c;有很多服务器可供选择&#xff0c;本文的话是基于阿里云服务的短信验证码功能实现。 关于注册和开通服务这些需要操作的&#xff0c;请各位小伙伴参考官…

Vue、React实现excel导出功能(三种实现方式保姆级讲解)

第一种&#xff1a;后端返回文件流&#xff0c;前端转换并导出&#xff08;常用&#xff0c;通常公司都是用这种方式&#xff09; 第二种&#xff1a;纯后端导出&#xff08;需要了解&#xff09; 第三种&#xff1a;纯前端导出&#xff08;不建议使用&#xff0c;数据处理放…

使用Ruoyi的定时任务组件结合XxlCrawler进行数据增量同步实战-以中国地震台网为例

目录 前言 一、数据增量更新机制 1、全量更新机制 2、增量更新机制 二、功能时序图设计 1、原始请求分析 2、业务时序图 三、后台定时任务的设计与实现 四、Ruoyi自动任务配置 1、Ruoyi自动任务配置 2、任务调度 总结 前言 在之前的相关文章中&#xff0c;发表文章列…

clang:在 Win10 上编译 MIDI 音乐程序(一)

先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 访问 Swift.org - Download Swift 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占…

02 Activiti 7:环境

02 Activiti 7&#xff1a;环境 1. 开发环境2. 流程设计器2.1. 在线安装2.2. 离线安装2.3. 中文乱码 3. 数据库 1. 开发环境 这是我本地开发环境 软件版本Jdk17Mysql8.0.36tomcat10.1.23IDEA2024.1Activiti7.0 2. 流程设计器 2.1. 在线安装 在 Plugins 搜索 activiti &…

【数据结构】初识数据结构

引入&#xff1a; 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我…

图题目:最大网络秩

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;最大网络秩 出处&#xff1a;1615. 最大网络秩 难度 4 级 题目描述 要求 由 n \texttt{n} n 座城市和一些连接这些城市的道路 roads \texttt{ro…

测径仪视窗镜片的维护和保养步骤

关键字:测径仪镜片,测径仪保养,测径仪维护,视窗镜片维护,视窗镜片擦拭保养,视窗镜片的检查, 视窗镜片定期保养 视窗镜片是保护光学镜头免受污染和损伤的光学平镜片&#xff0c;它的污染和破损会直接影响光学系统的测量结果。 视窗镜片一般在受到轻微污染&#xff08;指镜片上…

机器学习之SMOTE重采样--解决样本标签不均匀问题

一、SMOTE原理 通常在处理分类问题中数据不平衡类别。使用SMOTE算法对其中的少数类别进行过采样&#xff0c;以使其与多数类别的样本数量相当或更接近。SMOTE的全称是Synthetic Minority Over-Sampling Technique 即“人工少数类过采样法”&#xff0c;非直接对少数类进行重采…