Resnet BatchNormalization 迁移学习

时间:2015

网络中的亮点:

  • 超深的网络结构(突破1000层)
  • 提出residual模块
  • 使用Batch  Normalization加速训练(丢弃dropout)

层数越深效果越好?

是什么样的原因导致更深的网络导致的训练效果更差呢?

梯度消失和梯度爆炸

随着网络层数的不断加深,梯度消失和梯度爆炸的现象会越来越明显,

梯度消失:假设每一层的误差梯度是一个小于1的数,那么在我们反向传播过程中,每向前传播一次,都要乘以小于1的误差梯度。那么当我们网络越来越深的时候,所乘的小于1的系数越多,那么久越趋近于0,这样梯度就会越来越小,造成梯度消失现象。

梯度爆炸:假设每一层的误差梯度是一个大于1的数,那么在我们反向传播过程中,每向前传播一次,都要乘以大于1的误差梯度。那么当我们网络越来越深的时候,所乘的大于1的系数越多,,这样梯度就会越来越大,造成梯度爆炸现象。

退化问题

解决了梯度消失和梯度爆炸的问题后,仍存在层数深的效果还是没有层数小的效果好。怎样解决呢,在我们的resnet当中提出了一个叫做“残差”的结构。

梯度消失和梯度爆炸现象怎么解决呢?

数据标准化处理,权重初始化,以及BN(Batch Normalization).

residual结构

 shotcut:捷径的意思。主分支和侧分支要相加,两个的shape一定要相同。

Batch Normalization

参考链接:Batch Normalization详解以及pytorch实验_pytorch batch normalization-CSDN博客

Bath Normalization的目的是使我们的一批(Batch)feature map满足均值为0,方差为1的分布规律。通过该方法能够加速网络的收敛并提升准确率。

 如下图所示,对于Conv1来说输入的就是满足某一分布的特征矩阵,但对于Conv2而言输入的feature map就不一定满足某一分布规律了(注意这里所说满足某一分布规律并不是指某一个feature map的数据要满足分布规律,理论上是指整个训练样本集所对应feature map的数据要满足分布规律)。而我们Batch Normalization的目的就是使我们的feature map满足均值为0,方差为1的分布规律。

 使用BN时需要注意的问题

(1)训练时要将traning参数设置为True,在验证时将trainning参数设置为False。在pytorch中可通过创建模型的model.train()和model.eval()方法控制。因为在我们训练过程当中,需要我们不断去统计均值和方差,而在我们的验证或者预测过程当中使用的是我们历史统计的均值和方差,而不是当前所计算的均值和方差。

(2)batch size尽可能设置大点,设置小后表现可能很糟糕,设置的越大求的均值和方差越接近整个训练集的均值和方差。值设置得越大,越接近我们整个样本训练集的均值和方差,效果也会越好。设置得很小的时候,比如说它的极限状况也就是batch size设置为1,这种情况使用BN是没有什么作用的,效果可能还会变差。

(3)建议将bn层放在卷积层(Conv)和激活层(例如Relu)之间,且卷积层不要使用偏置bias,因为没有用,参考下图推理,即使使用了偏置bias求出的结果也是一样的。

迁移学习

使用迁移学习的优势:

  1. 能够快速的训练处一个理想的结果
  2. 当数据集较小时也能训练处理想的效果

什么是迁移学习

 对于浅层的卷积层而言,所学习到的角点信息和纹理信息等是比较通用的信息,这些信息不仅是在本网络中适用,在其他网络中也同样适用。所以就会有迁移的这么一个概念。就是将我们学习好的一些浅层网络的参数迁移到我们新的网络中去,这样我们新的网络就也拥有了识别底层通用特征的能力了,新的网络拥有了这些底层通用的检测识别能力之后,我们就能更加快速地去学习新的数据集的高维特征。

常见的迁移学习方式:

  1. 载入权重后训练所有参数
    1. 最后一层无法载入预训练模型参数
  2. 载入权重后只训练最后几层参数
    1. 载入所有模型参数后,固定全连接之前的所有模型参数,只去训练最后三层全连接层,这样我们所需训练的参数就会变少,训练速度也会变快。
  3. 载入权重后在原网络基础上再添加一层全连接层,进训练最后一个全连接层。
    1. 由于我们训练集的分类个数和原预训练集的分类个数不一样,所以最后一层是无法载入的。当我们使用第三个方法,也可以将最后一层的参数载入进去,只不过我们在最后的全连接层之后再加上新的全连接层,这个新的全连接层的节点个数也就是我们所采用的训练集的分类个数,然后仅仅去训练最后一层的参数。

自己的硬件条件有限或者训练时间有要求,第二种第三种方法都适合。对于硬件参数不受限,而且希望得到一个最优的结果,那就要采用第一种方法,这种方法相比于后面的两种方法训练时间稍微长一点,但最终达到的效果也要比后两种方法的好。但相比不用迁移学习的方法,还是要快很多的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自行车服务PEDALWAYS 网站bootstrap5模板

一、需求分析 自行车服务网站的作用是为骑行爱好者和自行车用户提供便捷的信息、工具和服务,以满足他们的需求。以下是一些常见的自行车服务网站的功能: 自行车租赁:提供自行车租赁服务,用户可以在线预订自行车并选择租赁期限&am…

x-cmd pkg | hyperfine - 命令行基准测试工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 hyperfine 是一个用于命令行基准测试的开源工具,可以对多次命令运行的时间进行分析,帮助开发人员评估和比较不同命令或脚本的性能。它是用 Rust 语言开发的,可以在 Windows、macOS …

Avalonia学习(十五)-OxyPlot

今天开始继续Avalonia练习。展示一些样例,尤其是第三方库的使用。 本节:OxyPlot 1.引入OxyPlot.Avalonia 2.项目引入 在Main方法里增加OxyPlotModule.EnsureLoaded()方法调用。 public static void Main(string[] args) {OxyPlotModule.EnsureLoade…

最新解决msvcr100.dll丢失的方法,多种解决方法详细解析

msvcr100.dll丢失会导致某些程序或游戏无法正常运行,msvcr100.dll是Microsoft Visual C 2010的运行时组件,它包含了许多C标准库的函数实现。这些函数在程序运行时被调用,用于处理各种任务,如字符串操作、数学计算、文件操作等。因…

rancher 手册

官方 https://www.rancher.com/https://github.com/rancher/rancherhttps://docs.rke2.io/ rancher kubernetesl yaml deploy rancher serverHelm Deploy Online Rancher DemoHelm & Kubernetes Offline Deploy Rancher v2.7.5 Demohelm upgrade rancher server from v2…

算法(3)——二分查找

一、什么是二分查找 二分查找也称折半查找,是在一组有序(升序/降序)的数据中查找一个元素,它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据,二分法就失去意义。 2、数据元素通常是数值…

中文版大模型 Token 成本计算器

分享一个轻量的小工具,10MB 左右,能够帮助你直观的了解大模型 Token 的计算方法。 希望能够帮助到想了解或者正在规划模型 API 使用成本的你。 写在前面 之所以折腾这个小工具,是因为有朋友和我提问,大模型 API 的 Token 到底是…

基于ssm的房屋租赁管理系统

功能介绍 房源信息模块: 房源信息展示、房源信息更新、房源信息增加、房源信息删除 账户管理模块: 账户登录、账户绑定、账户管理 租金结算模块: 每月租金信息、租金交付功能、月租金收入总额统计 房屋租赁合同管理模块: 房屋租赁…

【深度解析C++之运算符重载】

系列文章目录 🌈座右铭🌈:人的一生这么长、你凭什么用短短的几年去衡量自己的一生! 💕个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️:【深度解析C之this…

OpenGauss 之索引查找和匹配

一. 前言 本文主要通过走读OpenGuass的代码,来了解查询的时候OpenGuass是如何查找表的索引信息以及根据谓词条件过滤掉无用的索引信息的。 二. 索引路径匹配流程 1. 首先OpenGuass在build_simple_rel的时候,首先将一个表以及与他相关的索引都加到rel-&g…

DSL查询语法和RestClient查询文档

目录 DSL查询语法 DLS Query的分类 DSL Query基本语法 全文检索查询 精准查询 地理查询 复合查询 Function Score Query 复合查询 Boolean Query 搜索结果处理 排序 分页 分页 深度分页问题 深度分也解决方案 高亮 RestClient查询文档 快速入门 全文检索查…

MK米客方德品牌 SD NAND在对讲机领域的引领作用

SD NAND在对讲机上的应用 SD NAND在对讲机上广泛应用,为其提供了高效可靠的存储解决方案。 这种存储技术不仅能容纳大量语音和数据文件,而且具有高速读取的特点,保障了实时通信的质量。SD NAND还注重安全性,通过数据加密和访问控…

解锁React魔法门:高效项目开发工作流揭秘

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助,请关注我,一起向上进击。 创作不易,希望大家给一点鼓励,把公众号设置为…

OSCHINA Gitee 联合呈现,《2023 中国开源开发者报告》正式发布,总结分非常帮,可以免费看的报告!

《2023 中国开源开发者报告》 详细地址: https://talk.gitee.com/report/china-open-source-2023-annual-report.pdf 不需要收费下载!! 其中大模型的部分总结的非常棒 gietee 也支持 AI 模型托管了 如何在 Gitee 上托管 AI 模型 https://…

【java爬虫】使用element-plus进行个股详细数据分页展示

前言 前面的文章我们讲述了获取详细个股数据的方法,并且使用echarts对个股的价格走势图进行了展示,本文将编写一个页面,对个股详细数据进行展示。别问涉及到了element-plus中分页的写法,对于这部分知识将会做重点讲解。 首先看一…

Autosar MCAL-RH850P1HC Dio配置

文章目录 DioDioGeneralDioCriticalSectionProtectionDioDevErrorDetectDioDeviceNameDioFlipChannelApiDioMaskedWritePortApiDioUseWriteVerifyErrorInterfaceDioVersionCheckExternalModulesDioVersionInfoApiDioWriteVerifyDioWriteVerifyErrorInterface DioPortP0-P9DioPo…

管道进行进程间通信(上)

管道进行进程间通信 在posix和system V标准还没有出现的时候,进程间是如何进行通信的呢?这就要借助于我们今天学习的这个东西了。在进程间通信的标准没有出现之前,在os中就已经存在了文件了。而管道就是基于文件的一种进行进程间通信的方式。…

WorkPlus为企业打造私有化部署IM解决方案

在移动数字化时代,企业面临着如何全面掌控业务和生态的挑战。企业微信、钉钉、飞书、Teams等应用虽然提供了部分解决方案,但无法满足企业的私有化部署需求。此时,WorkPlus作为安全专属的移动数字化平台,被誉为移动应用的“航空母舰…

独热编码的两种实现形式

独热编码的两种实现形式: ​ OneHotEncoder和DictVectorizer是两种常用的特征向量化方法,用于将分类特征转换为数值特征。但还是有一定的区别不管是再输入格式还是在输出类型上都有一些不同。 区别: 输入格式要求: OneHotEncod…

小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

目录 一:IP核简介(具体可参考野火FPGA文档) 二: 章节导读 三:PLL电路原理 3.1 PLL基本实现框图 3.2 PLL倍频实现 3.3 PLL分频实现 四: 基于 PLL 的多时钟 LED 驱动设计 4.1 配置 Clocking Wizard 核 4.2 led …