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

CNN进展:AlexNet、VGGNet、ResNet 和 Inception

一、说明

对于初学者来说,神经网络进展的历程有无概念?该文综合叙述了深度神经网络的革命性突破,从AlexNet开始,然后深度VGG的改进,然后是残差网络ResNet和 Inception,如果能讲出各种特色改进点的和改进理由,那么该文的内容已经全掌握了。

二、探索 AlexNet:突破性的深度卷积网络

        AlexNet 代表了深度卷积网络的开创性应用之一,真正重塑了机器学习领域。2012 年,这一革命性模型在 ImageNet LSVRC-2012 挑战赛中以 84.7% 的准确率夺得冠军,远远超过了第二名的 73.8% 的准确率。

        AlexNet 的核心是其架构,包括五个卷积 (CONV) 层和三个全连接 (FC) 层。AlexNet 选择整流线性单元 (ReLU) 作为其激活函数,这一战略举措对其令人印象深刻的性能做出了重大贡献。这是网络内各个层的结构快照:

        AlexNet 架构(来源:oreilly.com)

        这是 AlexNet 的框图:

整个网络由大约 6200 万个可训练参数组成,这些参数协调工作以提供令人震惊的结果。

        输入和输出尺寸:

AlexNet 接收大小为 227x227x3 的输入,并以 1000x1 概率向量的形式返回输出,每个元素对应于一个特定的类。

        ReLU 革命:

在 AlexNet 出现之前,sigmoid 和 tanh 等激活函数是常态。然而,这些函数很容易受到梯度消失(VG)问题的影响,从而阻碍了训练过程。AlexNet 中引入 ReLU 激活函数避免了这个问题,正如原始论文所证明的那样,使用 ReLU 的网络的错误率比使用 tanh 非线性的相同网络快大约六倍。

尽管 ReLU 有许多优点,但由于其无界性质,可能会导致学习变量过大。为了解决这个问题,AlexNet 实施了本地响应标准化 (LRN)。LRN 促进激活的神经元与其周围对应神经元之间的平衡,从而增强网络的整体稳定性。

克服过度拟合:

AlexNet 的另一个值得注意的贡献是其对抗过度拟合的策略。AlexNet 采用 dropout 层,其中每个连接在训练期间有 50% 的机会被暂时“丢弃”或忽略。这种随机省略连接可以防止模型陷入过度拟合的陷阱,并帮助其避开不利的局部最小值。作为权衡,模型收敛所需的迭代次数可能会增加一倍,但模型的整体鲁棒性和准确性会显着提高。

三、VGGNet:深入探讨

        时代:

        2014 年是国际家庭农业和晶体学年,也是机器学习的里程碑时刻。它见证了机器人首次登陆彗星以及罗宾·威廉姆斯的不幸去世。然而,在深度学习领域,VGGNet 正是在这一年诞生的。

        目的:

        VGGNet 的出现是为了解决减少卷积层参数数量的需求,从而提高模型的效率和训练速度。

        该设计:

        VGGNet 存在多个版本,例如 VGG16、VGG19 等,根据网络总层数进行区分。以下是 VGG16 架构的说明性细分:

VGG16 框图(来源:neurohive.io)

        VGG16 拥有约 1.38 亿个参数。需要强调的一个关键方面是,所有卷积核的大小均为 3x3,最大池核的大小为 2x2,步幅为 2。

优势:

        真正的创新在于 3x3 卷积。让我们举个例子。如果我们有一个大小为 5x5x1 的输入层,使用内核大小为 5x5 且步幅为 1 的卷积层将得到 1x1 的输出特征图。然而,通过实现两个步幅为 1 的 3x3 卷积层可以获得相同的输出特征图。好处?5x5 卷积层滤波器需要训练 25 个变量。相比之下,两个内核大小为 3x3 的卷积层总共需要 3x3x2=18 个变量,减少了 28% 的参数。

        该技术可以进一步扩展。7x7 卷积层的效果可以通过实现三个 3x3 卷积层来实现,将可训练变量的数量减少 44.9%。其结果是更快的学习和更强的针对过度拟合的鲁棒性。

四、ResNet:跳跃的艺术

         问题

        随着卷积神经网络变得更深,当反向传播到初始层时,导数几乎可以忽略不计。

        解决方案

        ResNet 通过引入两种类型的“快捷连接”提供了一种巧妙的补救措施:身份快捷方式投影快捷方式

        架构

        ResNet 拥有多种层数不同的架构,例如 ResNet50 和 ResNet101。由于解决了梯度消失问题的快捷连接,ResNet 模型可以具有更大的深度。

        这个概念

        ResNet 的核心是残差块。网络不是学习 x → F(x) 的直接映射,而是学习 x → F(x)+G(x) 的残差映射。恒等连接存在于输入和输出维度相同的地方,而投影连接存在于这些维度不同的地方。

残差块(图片来源:原论文)

        投影和身份:

        当 F(x) 和 x 的尺寸不同时,将实现投影快捷方式。它调整输入 x 的维度以匹配输出 F(x) 的维度。另一方面,当F(x)和x的维度相同时,使用Identity捷径,这使得网络更容易学习。

五、Inception:广泛发展

        动机:

        Inception 与 VGGNet 诞生于同一时代,其动机是在图像分类任务中有效识别可变大小特征的需求。Inception 不是仅仅添加更多层(更深),而是通过在同一层中合并不同大小的内核来扩大范围。

        架构:

        Inception网络由多个Inception模块组成,每个模块包含四个并行操作:

  • 1x1 转换层
  • 3x3 转换层
  • 5x5 转换层
  • 最大池化

        策略:

        Inception扩展了网络空间,让训练相应地决定最有价值的特征和权重。通过允许不同的卷积捕获给定级别的各种特征,所有这些特征在输入到下一层之前都会被提取和连接。

六、CNN:比较快照

从 AlexNet、ResNet-152、VGGNet 和 Inception 的比较中得出了一些见解:

  • 尽管 AlexNet 和 ResNet-152 都有大约 60M 参数,但它们的 top-5 准确率大约有 10% 的差异。然而,训练 ResNet-152 需要比 AlexNet 更多的计算量,从而导致训练时间和能耗增加。
  • 与 ResNet-152 相比,VGGNet 具有更多的参数和浮点运算 (FLOP),但精度也有所下降。因此,它需要更多的时间来训练,但性能却会下降。
  • 训练 AlexNet 所需的时间与训练 Inception 大致相同,但 Inception 所需的内存减少了十倍,并且提供了更高的准确性(大约提高了 9%)。

相关文章:

CNN进展:AlexNet、VGGNet、ResNet 和 Inception

一、说明 对于初学者来说,神经网络进展的历程有无概念?该文综合叙述了深度神经网络的革命性突破,从AlexNet开始,然后深度VGG的改进,然后是残差网络ResNet和 Inception,如果能讲出各种特色改进点的和改进理由…...

数据的存储--MongoDB文档存储

MongoDB文档存储 NoSQL,全称为Not Only SQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL层的解析,数据之间没有耦合性,性能非常高。 非关系行数据库又可细分如下。 键值存…...

Notepad++ 通过HexEditor插件查看.hprof文件、heap dump文件的堆转储数据

文章目录 需求场景插件安装查看notepad的版本,看看是32位的还是64位的下载对应的版本解压导入插件打开notepad插件文件夹:Notepad安装目录新建一个HexEditor文件夹选中插件文件导入 重启notepad使用 需求场景 想要查看app内存的某个域的数据。 利用Andr…...

微服务学习 | Eureka注册中心

微服务远程调用 在order-service的OrderApplication中注册RestTemplate 在查询订单信息时,需要同时返回订单用户的信息,但是由于微服务的关系,用户信息需要在用户的微服务中去查询,故需要用到上面的RestTemplate来让订单的这个微…...

spring boot集成quartz

目录 1.定时任务实现 2.quartz说明 3.存储方式 4.示例 5.定时任务的重新定制,恢复,暂停及删除 1.定时任务实现 定时任务的实现方式有很多,如下: 1.启动类中添加EnableScheduling,开启定时任务功能,然…...

[Linux] yum仓库相关

一、yum仓库 1.1 yum简介 yum 是一种基于 RPM 软件包(Red-Hat Package Manager 的缩写)的软件更新机制,可自动解决软件包之间的依赖关系。这就解决了日常工作中花费大量时间寻找安装包的问题。 为什么会出现依赖 linux 本身就有简化系统的优…...

2023.11.15-hivesql之炸裂函数explode练习

把一个容器的多个数据炸裂出单独展示: explode(容器) 需求:将NBA总冠军球队数据使用explode进行拆分&#xff0c;并且根据夺冠年份进行倒序排序。 1.建表 --step1:建表 create table the_nba_championship(team_name string,champion_year array<string> ) row format…...

Linux - 内核 - 安全机制 - 内存页表安全

说明 内核页表安全的最终目标是&#xff1a;将内核使用到的内存页&#xff08;内核与module占用&#xff09;的属性&#xff08;读/写/可执行&#xff09;配置成安全的&#xff0c;即&#xff1a;代码段和rodata段只读&#xff0c;非代码段不能执行等&#xff0c;用来防御堆栈…...

Linux---(七)Makefile写进度条(三个版本)

文章目录 一、前提引入&#x1f397;️下面的代码什么现象&#xff1f;&#x1f397;️下面的代码什么现象&#xff1f; 二、缓冲区三、回车换行&#x1f397;️注意&#x1f397;️图解&#x1f397;️老式回车键造型&#xff08;意思是充当两个动作&#xff09;&#x1f397;…...

数据库分页查询

数据库只所以要分页查询&#xff0c;其实是界面显示的需要&#xff0c;不是数据库的需要。 数据库本身查询是很快的。本文章是针对这种情况的。 如果数据库本身查询慢&#xff0c;那是优化查询语句的事情了。不在本文章范围内。 今天遇到了这个问题。 是个老项目。在原有的查询…...

如何选择合适的数据库管理工具?Navicat Or DBeaver

写在前面 在阅读本文之前&#xff0c;糖糖给大家准备了Navicat和DBeaver安装包&#xff0c;在公众号内回复“Navicat”或“DBeaver”或"数据库管理工具"来下载。 引言 对于测试而言&#xff0c;在实际工作中往往会用到数据库&#xff0c;那么选择使用哪种类型的数…...

Opencv!!在树莓派上安装Opencv!

一、更新树莓派系统 sudo apt-get update sudo apt-get upgrade二、安装python-opencv sudo apt-get install libopencv-dev sudo apt-get install python3-opencv三、查看是否安装成功 按以下命令顺序执行&#xff1a; python import cv2 cv2.__version__如果出现版本号&a…...

三菱FX3U小项目—传输带定分级控制

目录 一、项目描述 二、IO口分配 三、项目程序 四、总结 一、项目描述 两条运输带顺序相连&#xff0c;为了避免运送的物料在1号运输线上堆积&#xff0c;所以启动时&#xff0c;1号运输带开始运行&#xff0c;5S后2号运输带自动启动。停机时顺序与启动刚好相反&#xff0c…...

实例解释遇到前端报错时如何排查问题

前端页面报错&#xff1a; 1、页面报错500&#xff0c;首先我们可以知道是服务端的问题&#xff0c;需要去看下服务端的报错信息&#xff1a; 2、首先我们查看下前端是否给后端传了id: 我们可以看到接口是把ID返回了&#xff0c;就需要再看下p_id是什么情况了。 3、我们再次请…...

微电影分销付费短剧小程序开发

微电影系统分销管理付费软件是一款面向微电影制作公司和影视产业的付费软件&#xff0c;它的出现旨在帮助微电影制作公司和影视产业实现分销管理&#xff0c;提高产业的效率和竞争力。本文将介绍微电影系统分销管理付费软件的背景、特点和开发方法。 一、背景 微电影作…...

时间序列预测中的4大类8种异常值检测方法(从根源上提高预测精度)

一、本文介绍 本文给大家带来的是时间序列预测中异常值检测&#xff0c;在我们的数据当中有一些异常值&#xff08;Outliers&#xff09;是指在数据集中与其他数据点显著不同的数据点。它们可能是一些极端值&#xff0c;与数据集中的大多数数据呈现明显的差异。异常值可能由于…...

Android---Gradle 构建问题解析

想必做 Android App 开发的对 Gradle 都不太陌生。因为有 Android Studio 的帮助&#xff0c;Android 工程师使用 Gradle 的门槛不算太高&#xff0c;基本的配置都大同小异。只要在 Android Studio 默认生成的 build.gradle 中稍加修改&#xff0c;就都能满足项目要求。但是&am…...

02-2解析JsonPath

一、jsonpath的安装及使用方式 pip安装 pip install jsonpathjsonpath的使用 obj json.load(open(json文件, r, encodingutf‐8)) ret jsonpath.jsonpath(obj, jsonpath语法)可以参考以下这篇博客进行jsonpath的简单入门JSONPath-简单入门...

Git拉取远程指定分支

git clone 指定分支-CSDN博客 即&#xff1a;git clone -b 分支名称 git地址 这种方法也是可以的。但是其实主分支也是拉取下来了&#xff0c;其他分支也拉取下来了&#xff0c;只不过所需分支也拉取下来并且对应当前工作区的代码。如果真的只拉取指定分支&#xff0c;可以用…...

使用Ant Design Pro开发时的一个快速开发接口请求的技巧

使用Ant Design Pro开发时的一个快速开发接口的技巧 当我们的后端在写好接口以后&#xff0c;我们通过swagger knife4j可以生成一个接口文档&#xff0c;后端启动以后&#xff0c;可以生成一个接口文档&#xff0c;当输入地址 localhost:8101/api/v3/api-docs &#xff08;这…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

API网关Kong的鉴权与限流:高并发场景下的核心实践

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 引言 在微服务架构中&#xff0c;API网关承担着流量调度、安全防护和协议转换的核心职责。作为云原生时代的代表性网关&#xff0c;Kong凭借其插件化架构…...

6.9-QT模拟计算器

源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...