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

ResNet简介

ResNet (Residual Network)

此网络于2015年,国人何先生提出,用于解决随着深度学习的层数加深造成的网络退化现象梯度消失、梯度爆炸

问题1 退化现象

当深度学习的各项指标能够随着训练轮数收敛的情况下,网络的层数增强未能像理论一样:"抽象出更具有语义的特征,从而比层数少的网络准确率高。"反而准确率是下降的。

在这里插入图片描述
可以看到这并不是因为过拟合引起的测试准确率下降,因为训练时同样效果不佳。

解决方案:采用两种residual网络结构来加强数据原始数据与最终输出特征的关联度,弱化层之间的强联系,允许跳跃链接。

下图中虚线代表采用了residual的深度学习网络,可以看到,良好的解决了网络退化的问题。

在这里插入图片描述

BasicBlock和Bottleneck

在这里插入图片描述
左侧残差结构称为 BasicBlock,右侧残差结构称为 Bottleneck。

从参数量的对比上来看,假设我们都是输入256通道的数据,那么
CNN参数个数 = 卷积核尺寸×卷积核深度 × 卷积核组数 = 卷积核尺寸 × 输入特征矩阵深度 × 输出特征矩阵深度
BasicBlock,参数的个数是:256×256×3×3+256×256×3×3=1179648
Bottleneck,参数的个数是:1×1×256×64+3×3×64×64+1×1×256×64=69632

考虑参数量,通常在深层时会采用三层的resnet结构

Shortcut connection

上图中的“跨层链接”称为短路链接:Shortcut connection。

短路连接 H(x) = F(x) + x 这里需要逐元素加和,如果 F(x) 与 x 的通道数相同,则可以直接相加(对应实线),如果 F(x) 与 x 的通道数不同,则需要进行维度匹配。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
原文的标注中已说明,conv3_x, conv4_x, conv5_x所对应的一系列残差结构的第一层残差结构都是虚线残差结构。因为这一系列残差结构的第一层都有调整输入特征矩阵shape的使命(将特征矩阵的高和宽缩减为原来的一半,将深度channel调整成下一层残差结构所需要的channel)

原文中的shortcut三种实现方案。
(A)“zero-padding shortcuts are used for increasing dimensions, and all shortcuts are parameterfree”
两者维度(通道数)不同,可对增加的维度使用零填充(使用全0填充缺少的维度, 然后concat低维数据从而升到高维)。

(B)“projection shortcuts are used for increasing dimensions, and other shortcuts are identity”
两者维度(通道数)不同,可采用论文中提到的公式H(x) = F(x) + Wx来匹配维度,其中 W 代表线性投影(使用 1x1 卷积),其他shortcuts则为恒等映射(维度相同时)。

(C)“all shortcuts are projections”
无论维度是否相同,对于所有的shortcuts,都使用 1x1 卷积来匹配维度。

问题2 梯度消失、梯度爆炸

梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大

解决方案:Batch normalization(批(数据)归一化)

Batch Normalization是指批标准化处理,将一批数据的所有的feature map满足均值为0,方差为1的分布规律。它不仅可以加快了模型的收敛速度,而且更重要的是在一定程度缓解了深层网络中“梯度弥散(特征分布较散)”的问题。

在BN出现之前,数据归一化一般都在数据输入层,对输入数据进行求均值以及求方差做归一化。

BN的出现使我们可以在网络中任意一层对数据归一化处理。我们现在所用的优化方法大多都是min-batch SGD,所以我们的归一化操作就成为Batch Normalization。

BN中的数据归一化是在正态分布式的归一化的基础上进行的修改,步骤如下:
在这里插入图片描述

1.求每一个训练批次数据的均值
2.求每一个训练批次数据的方差
3.使用均值和方差对该批次的训练数据做归一化,获得(0,1)正态分布。其中ε是为了避免除数为0时所使用的微小正数。

由于归一化后的xi基本会被限制在正态分布下,使得网络的表达能力下降。为解决该问题,我们引入两个新的参数:γ,β。
γ是尺度因子,β是平移因子,在训练时网络学习得到。

4.尺度变换和偏移:将xi乘以γ调整数值大小,再加上β增加偏移后得到yi。

1-3步如下

在这里插入图片描述
左图是没有经过任何处理的输入数据,曲线是sigmoid函数,如果数据在梯度很小的区域,那么学习率就会很慢甚至陷入长时间的停滞。若是使用均值和方差进行归一化,则如右图所示,这会让数据总是在中心一片梯度最大的区域,这是对抗梯度消失的一种有效手段(ReLU),如果对于多层数据做归一化,则可将数据分布忽略提高收敛速度。

BN方法的第四步
在这里插入图片描述
为什么要有第四步尺度变换与偏移?

减均值除方差得到的分布是正态分布,不能认为这样得到的正太分布就是最符合我们训练样本特征的分布的函数曲线。比如数据本身就很不对称,或者激活函数未必是对方差为1的数据最好的效果,比如Sigmoid激活函数,在-1~1之间的梯度变化不大,那么非线性变换的作用就不能很好的体现。也就是说,减均值除方差操作后可能会削弱网络的性能。因此要引入第四步,改变方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。

BN的本质,第四步操作和均值方差的关系是什么?
而第四步的本质或者说BN的本质是利用优化,改变方差大小和均值位置,使得新的分布更切合数据的真实分布,保证模型的非线性表达能力。BN的极端的情况就是这两个参数等于mini-batch的均值和方差,那么经过batch normalization之后的数据和输入完全一样,当然一般的情况是不同的。

预测时BN所使用的均值和方差来源于那里?
在训练时,我们会对同一批的数据的均值和方差进行求解,进而进行归一化操作。对于预测阶段时所使用的均值和方差,也是来源于训练集。在模型训练时我们记录下每个batch的均值和方差,训练完毕后,求整个训练样本的均值和方差期望值作为进行预测时,进行BN的的均值和方差。

相关文章:

ResNet简介

ResNet (Residual Network) 此网络于2015年,国人何先生提出,用于解决随着深度学习的层数加深造成的网络退化现象和梯度消失、梯度爆炸。 问题1 退化现象 当深度学习的各项指标能够随着训练轮数收敛的情况下,网络的层数增强未能像理论一样&…...

了解单例模式,工厂模式(简单易懂)

文章目录 单例模式饿汉模式懒汉模式对比 工厂模式简单工厂模式(Simple Factory Pattern)工厂方法模式(Factory Method Pattern)抽象工厂模式(Abstract Factory Pattern)对比 单例模式 什么是单例&#xff…...

【中危】 Apache NiFi 连接 URL 验证绕过漏洞 (CVE-2023-40037)

漏洞描述 Apache NiFi 是一个开源的数据流处理和自动化工具。 在受影响版本中,由于多个Processors和Controller Services在配置JDBC和JNDI JMS连接时对URL参数过滤不完全。使用startsWith方法过滤用户输入URL,导致过滤可以被绕过。攻击者可以通过构造特…...

【Git版本控制工具使用---讲解一】

Git版本控制工具使用 安装设置用户名签名和邮箱Git常用的命令 初始化本地库查看本地状态Git 命令添加暂存区提交本地库查看版本信息修改文件版本穿梭 安装 首先根据自身电脑的配置选择性的安装是32位的还是64位的Git版本控制工具 我这边安装的是64位的 以下是我安装的时候的过…...

NLP | 基于LLMs的文本分类任务

比赛链接:讯飞开放平台 来源:DataWhale AI夏令营3(NLP) Roberta-base(BERT的改进) ①Roberta在预训练的阶段中没有对下一句话进行预测(NSP) ②采用了动态掩码 ③使用字符级和词级…...

攻防世界-base÷4

原题 解题思路 base644,莫不是base16,base16解码网站: 千千秀字...

【Java转Go】快速上手学习笔记(三)之基础篇二

【Java转Go】快速上手学习笔记(二)之基础篇一 了解了基本语法、基本数据类型这些使用,接下来我们来讲数组、切片、值传递、引用传递、指针类型、函数、map、结构体。 目录 数组和切片值传递、引用传递指针类型defer延迟执行函数map结构体匿名…...

【vue 引入pinia与pinia的详细使用】

vue引入pinia与使用 安装引入使用定义 store在组件中使用 store在插件中使用 store配置 store 总结 Pinia 是一个用于 Vue 3 的状态管理库,其设计目标是提供一个简单、一致的 API 和强类型支持。下面介绍如何引入 Pinia 并使用它。 安装 npm install pinia引入 在…...

USACO18DEC Fine Dining G

P5122 [USACO18DEC] Fine Dining G 题目大意 有一个由 n n n个点 m m m条边构成的无向连通图,这 n n n个点的编号为 1 1 1到 n n n。前 n − 1 n-1 n−1个点上都有一头奶牛,这些奶牛都要前往 n n n号点。第 i i i条边连接 a i a_i ai​和 b i b_i bi​…...

fckeditor编辑器的两种使用方法

需要的资源包我放我资源里了&#xff0c;不要积分 https://download.csdn.net/download/wybshyy/88245895 首先把FredCK.FCKeditorV2.dll添加到引用 具体方法如下&#xff0c;一个是客户端版本&#xff0c;一个是服务器端版本 客户端版本&#xff1a; <% Page Language…...

数据结构,查找算法(二分,分块,哈希)

一、查找算法 1、二分查找:(前提条件: 必须有序的序列) #include <stdio.h> //二分查找 value代表的是被查找的值 int findByHalf(int *p, int n, int value) {int low = 0;//low低int high = n-1;//high高int middle;//用来保存中间位置的下标while(low <= high…...

C++(Qt)软件调试---gdb调试入门用法(12)

gdb调试—入门用法&#xff08;1&#xff09; 文章目录 gdb调试---入门用法&#xff08;1&#xff09;1、前言1.1 什么是GDB1.2 为什么要学习GDB1.3 主要内容1.4 GDB资料 2、C/C开发调试环境准备3、gdb启动调试1.1 启动调试并传入参数1.2 附加到进程1.3 过程执行1.4 退出调试 4…...

shell和Python 两种方法分别画 iostat的监控图

在服务器存储的测试中,经常需要看performance的性能曲线&#xff0c;这样最能直接观察HDD或者SSD的性能曲线。 如下这是一个针对HDD跑Fio读写的iostat监控log,下面介绍一下分别用shell 和Python3 写画iostat图的方法 1 shell脚本 环境:linux OS gnuplot工具 第一步 :解析iosta…...

设计模式(9)建造者模式

一、 1、概念&#xff1a;将一个复杂对象的构造与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象&#xff0c;这些对象内部构建间的顺序通常是稳定的&#xff0c;但对象内部的构建通常面临着复杂的变化&#xff1b;建造…...

PHP 创业感悟交流平台系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 创业感悟交流平台系统&#xff08;含论坛&#xff09;是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码下载&#xff1a; https://download.csdn.…...

工作流程引擎之flowable(集成springboot)

0、背景 现状&#xff1a;公司各部门业务系统有各自的工作流引擎&#xff0c;也有cross function的业务在不同系统或OA系统流转&#xff0c;没有统一的去规划布局统一的BPM解决方案&#xff0c;近期由于一个项目引发朝着整合统一的BPM方案&#xff0c;特了解一下市面上比较主流…...

leetcode54. 螺旋矩阵(java)

螺旋矩阵 题目描述解题 收缩法 上期经典算法 题目描述 难度 - 中等 原题链接 - leecode 54 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7…...

go gorm 查询

定义model package mysqltestimport ("errors""fmt""gorm.io/gorm" )type Product struct {gorm.ModelID uint gorm:"primarykey"Name string gorm:"column:name"Price float64 gorm:"column:price_value&quo…...

Flutter GetXController 动态Tabbar 报错问题

场景&#xff1a; 1.Tabbar的内容是接口获取的 2. TabController? tabController;&#xff1b; 在onInit 方法中初始化tabbarController tabController TabController(initialIndex: 0, length: titleDataList.length, vsync: this); 这时候会报一个错误 Controllers l…...

Redis(缓存预热,缓存雪崩,缓存击穿,缓存穿透)

目录 一、缓存预热 二、缓存雪崩 三、缓存击穿 四、缓存穿透 一、缓存预热 开过车的都知道&#xff0c;冬天的时候启动我们的小汽车之后不要直接驾驶&#xff0c;先让车子发动机预热一段时间再启动。缓存预热是一样的道理。 缓存预热就是系统启动前&#xff0c;提前将相关的…...

UE4/5Niagara粒子特效学习(使用UE5.1,适合新手)

目录 创建空模板 创建粒子 粒子的基础属性 粒子的生命周期 颜色 大小设置 生成的位置 Skeletal Mesh Location的效果&#xff1a; Shape Location 添加速度 添加Noise力场 在生成中添加&#xff1a; 效果&#xff1a; ​编辑 在更新中添加&#xff1a; 效果&…...

from moduleA import * 语句 和import moduleA 的区别

from moduleA import * 语句和import moduleA 的区别是&#xff1a; from moduleA import * 语句会将moduleA模块中的所有内容&#xff08;函数、变量、类等&#xff09;直接导入到当前模块的命名空间中&#xff0c;这样就可以直接使用它们&#xff0c;而不需要加上模块名的限…...

【leetcode 力扣刷题】交换链表中的节点

24. 两两交换链表中的节点 24. 两两交换链表中的节点两两节点分组&#xff0c;反转两个节点连接递归求解 24. 两两交换链表中的节点 题目链接&#xff1a;24. 两两交换链表中的节点 题目内容&#xff1a; 题目中强调不能修改节点内部值&#xff0c;是因为如果不加这个限制的话…...

学会Mybatis框架:让你的代码更具灵活性、可维护性、安全性和高效性【二.动态SQL】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Mybatis的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.Mybatis动态SQL如何应用 1.需求 2.…...

Oracle 中 ROWNUM 使用问题记录

ROWNUM 使用问题记录(2023-08-17) Oracle 版本&#xff1a; 19.0.0.0.0 Enterprise现象&#xff1a;今天在项目遇到一个问题&#xff0c;测试人员反馈前一天能看到的数据今天看不到了 用表格举例&#xff0c;这是前一天看到的数据&#xff0c;有9、7、1 这几个数量信息 日期…...

MySQL数据库:内置函数

日期函数 规定&#xff1a;日期&#xff1a;年月日 时间&#xff1a;时分秒 函数名称作用描述current_date()当前日期current_time()当前时间current_timestamp()当前时间戳date(datetime)返回datetime参数的日期部分date_add(date,interval d_value_type)在date中添加…...

【C++杂货铺】探索string的底层实现

文章目录 一、成员变量二、成员函数2.1 默认构造函数2.2 拷贝构造函数2.3 operator2.4 c_str()2.5 size()2.6 operator[ ]2.7 iterator2.8 reserve2.9 resize2.10 push_back2.11 append2.12 operator2.13 insert2.14 erase2.15 find2.16 substr2.17 operator<<2.18 opera…...

c++ day1

定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数内测试该函数。 …...

变动的Python爬虫实现

在电商时代&#xff0c;了解商品价格的变动对于购物者和卖家来说都非常重要。本文将分享一种基于Python的实时监控电商平台商品价格变动的爬虫实现方法。通过本文的解决方案和代码示例&#xff0c;您将能够轻松监控商品价格&#xff0c;并及时做出决策。 一、了解需求和目标 在…...

mybatis-plus--配置-(sql)日志输出-自动填充-分页-多数据源-逻辑删除

写在前面&#xff1a; 本文主要介绍mybatis-plus的配置&#xff0c;以后在有的时候在补充。欢迎交流。 文章目录 日志输出自动填充分页全局字段配置多数据源 日志输出 调试的时候需要看执行的sql&#xff0c;这时候就很需要日志来记录查看了。 mybatis-plus的日志配置在yml…...

药厂网站建设/百度推广优化怎么做

更新&#xff1a;本文现已过时。 请参阅更新的版本&#xff0c; 如何使用HTML5全屏API&#xff08;再次&#xff09; 。 Flash提供全屏模式已经有很多年了&#xff0c;但是直到现在&#xff0c;浏览器供应商都拒绝使用该功能。 主要原因&#xff1a;安全性。 如果您可以强制应用…...

机关网站机制建设情况/seo优化包括

寄生组合式继承 定义&#xff1a;所谓寄生组合式继承&#xff0c;即通过借用构造函数来继承属性&#xff0c;通过原型链的混成形式来继承方法。其背后的基本思路是&#xff1a;不必为了指定子类型的原型而调用超类型的构造函数&#xff0c;我们所需要的无非就是超类型原型的一…...

深圳 b2c 网站建设/百度学术官网入口

一、AI可解释性 1.什么是可解释性&#xff1f; 可解释性&#xff0c;就是我们需要完成一件事的时候&#xff0c;我们能获取到的足够多的&#xff0c;能让我们自己理解的信息。当我们不能获得足够多的信息&#xff0c;来理解一件事情的时候&#xff0c;我们可以说这是不可解释…...

罗湖公司网站建设/长沙公司网络营销推广

mysql数据类型&#xff0c;数据类型介绍• 数据类型设置• 列属性• 数据类型的字符集用法• 选择适当的数据类型2、数据类型介绍• 四种主要类别&#xff1a;数值类型字符类型时间类型二进制类型• 数据类型的 ABC 要素&#xff1a;Appropriate&#xff08;适当&#xff09;Br…...

网站设计方案和技巧/网站seo啥意思

SaltStack 安装SaltStack PillarSaltStack GrainsSaltStack salt 命令SaltStack salt-key 命令SaltStack salt-run 命令SaltStack salt-ssh 命令SaltStack 批量安装软件SaltStack 批量分发文件SaltStack 批量分发目录SaltStack 批量执行脚本SaltStack 批量管理任务计划SaltStac…...

金融手机网站开发/百度首页排名代发

文件夹: 类型文件 include: .h &#xff08;头文件&#xff09; lib: .lib &#xff08;库&#xff09; 前面二者在vs2008中通过属性来配置。 bin: .dll &#xff08;动态链接库&#xff09; 动态链接库是通过系统路径来配置的。 添加库&#xff08;libs&#xff09;文件目录 …...