权重初始化

常用的权重初始化方法:

随机初始化(Random Initialization)

Xavier 初始化(Glorot Initialization)

He 初始化(He Initialization)Kaiming

零初始化(Zero Initialization)

预训练初始化(Pre-trained Initialization):从预训练的模型中加载权重作为初始化,例如从在大型数据集上预训练的模型中加载权重,然后进行微调。

自定义初始化(Custom Initialization):根据特定的问题领域和网络架构,设计适合的权重初始化策略。

为什么要进行权重初始化设计:从梯度消失与爆炸说起

  • 要避免梯度消失或者梯度爆炸,就要严格控制网络输出层的输出值的范围,也就是每一层网络的输出值不能太大也不能太小。

  • 只要采用恰当的权值初始化方法,就可以实现网络的输出值的尺度维持在一定范围内, 这样在反向传播的时候,就有利于缓解梯度消失或者爆炸现象的发生
    但是与方差有什么关系

在实际中我们还得考虑激活函数的存在,从上面的前向传播中加一个激活函数再看一下结果
在这里插入图片描述

具有激活函数的时候,怎么对权重进行初始化呢?

Xavier初始化

方差一致性:保持数据尺度范围维持在恰当范围, 通常方差为1。 如果有了激活函数之后,我们应该怎么对权重初始化呢?

2010年Xavier发表了一篇文章,详细探讨了如果有激活函数的时候,如何进行权重初始化, 当然它也是运用的方差一致性原则, 但是它这里考虑的是饱和激活函数, 如sigmoid, tanh。
我们在参数初始化里面用Xavier初始化权重

    def initialize(self):for m in self.modules():if isinstance(m, nn.Linear):# Xavier初始化权重tanh_gain = nn.init.calculate_gain('tanh')	#计算激活函数的方差变化尺度nn.init.xavier_uniform_(m.weight.data, gain=tanh_gain)

这里面用到了一个函数nn.init.calculate_gain(nonlinearity, param=None)这个函数的作用是计算激活函数的方差变化尺度, 怎么理解这个方差变化尺度呢?其实就是输入数据的方差除以经过激活函数之后的输出数据的方差。nonlinearity表示激活函数的名称,如tanh, param表示激活函数的参数,如Leaky ReLU的negative_slop。 (这里不用也行,但得知道这个方法)。这时候再来看一下最后的结果:
在这里插入图片描述
所以Xavier权重初始化,有利于缓解带有sigmoid,tanh的这样的饱和激活函数的神经网络的梯度消失和爆炸现象。

Kaiming初始化

这个依然是考虑的方差一致性原则,针对的激活函数是ReLU及其变种

    def initialize(self):for m in self.modules():if isinstance(m, nn.Linear):nn.init.kaiming_normal_(m.weight.data)# nn.init.normal_(m.weight.data, std=np.sqrt(2 / self.neural_num))     # 这两句话其实作用一样,不过自己写还得计算出标准差

十种权重初始化方法

Pytorch里面提供了很多权重初始化的方法,可以分为下面的四大类:

针对饱和激活函数(sigmoid, tanh):Xavier均匀分布, Xavier正态分布
针对非饱和激活函数(relu及变种):Kaiming均匀分布, Kaiming正态分布
三个常用的分布初始化方法:均匀分布,正态分布,常数分布
三个特殊的矩阵初始化方法:正交矩阵初始化,单位矩阵初始化,稀疏矩阵初始化:

总结

方差要维持在一定范围之内,不然可能出现梯度爆炸或者消失的情况。由于加上激活函数后,所以要选择适合该激活函数的权重初始化方法

系统学习Pytorch笔记六:模型的权值初始化与损失函数介绍
权重初始化

在这里插入图片描述

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

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

相关文章

【C语言】文件操作 -- 详解

一、什么是文件 磁盘上的文件是文件。 1、为什么要使用文件 举个例子,当我们想实现一个 “通讯录” 程序时,在通讯录中新建联系人、删除联系人等一系列操作,此时的数据存储于内存中,程序退出后所有数据都会随之消失。为了让通讯录…

【TPC开证报错】-出库单数据无法匹配【成品产出单明细】

今天可信平台有个证书无法开证,送审报错。 其实业务逻辑是销售出库的单据,也会有个成品入库单。 成品入库单里面的所有箱码,都需要包装记录。 这个就是MES系统里的包装报工(之前自动化缺失的包装数据,曾经导过一次。…

Spark第三课

1.分区规则 1.分区规则 shuffle 1.打乱顺序 2.重新组合 1.分区的规则 默认与MapReduce的规则一致,都是按照哈希值取余进行分配. 一个分区可以多个组,一个组的数据必须一个分区 2. 分组的分区导致数据倾斜怎么解决? 扩容 让分区变多修改分区规则 3.HashMap扩容为什么必须…

2023年Java核心技术面试第七篇(篇篇万字精讲)

目录 十二 . Java 提供了哪些IO方式?NIO如何实现多路复用? 12.1 典型回答: 12.1.1 传统的java.io包: 12.1.2 Java 1.4中引入NIO(java.nio包): 12.1.2 .1 详细解释: 12.1.2.2 多路复…

抖音seo短视频矩阵系统源代码开发原型--开源

一、系统设计 1.需求分析 抖音SEO矩阵系统的主要功能是提高视频的曝光和排名,因此,其主要需求包括: 1)关键词研究:通过分析用户搜索行为,挖掘出热门关键词,以便制定针对性的SEO策略。 2&…

无涯教程-PHP - IntlChar类

在PHP7中&#xff0c;添加了一个新的 IntlChar 类&#xff0c;该类试图公开其他ICU函数。此类定义了许多静态方法和常量&#xff0c;可用于操作unicode字符。使用此类之前&#xff0c;您需要先安装 Intl 扩展名。 <?phpprintf(%x, IntlChar::CODEPOINT_MAX);print (IntlCh…

java:Tomcat

文章目录 背景服务器web 服务器服务资源的分类服务器软件的分类nginx 和 tomact总结 安装Tomcatbrew安装官网压缩包安装IDEA集成IDEA插件 说明 背景 在讲 Tomcat 是啥之前&#xff0c;我们先来了解一些概念。 服务器 可以理解为一个高性能的电脑&#xff0c;但是这个电脑现在…

数据湖:解锁数据价值的新时代

文章首发地址 数据湖&#xff08;Data Lake&#xff09;是一种数据存储和管理架构&#xff0c;它将不同类型的数据&#xff08;如结构化数据、半结构化数据和非结构化数据&#xff09;以原始形式保存在一个公共存储库中&#xff0c;而不强制执行预定义模式或数据结构。数据湖…

下半场开哨!AIGC+智能汽车,谁在引领市场新风口

“智能汽车已经成为AIGC应用的下一个‘重地’。” 中科创达副总裁、畅行智驾CEO屠科在8月22日于南京举办的《软件赋能汽车智能化转型发展高峰论坛》上发表演讲时表示&#xff1a;在AIGC时代&#xff0c;汽车的“智能属性”将加速释放&#xff0c;智能驾驶也将迎来快速发展。 中…

Smartbi电子表格软件版本更新,首次推出Excel轻应用和语音播放

Smartbi电子表格软件又又又更新啦&#xff01; 此次更新&#xff0c;首次推出了新特性——Excel轻应用和语音播报。另外&#xff0c;还对产品功能、Demo示例、配套文档进行了完善和迭代。 低代码开发Excel轻应用 可实现迅速发布web应用 业务用户的需求往往都处于“解决问题”…

第4篇:vscode+platformio搭建esp32 arduino开发环境

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 1.配置默认安装路径&#xff0c;安装到D盘。 打开环境变量&#xff0c;点击新建 输入变量名PLATFORMIO_CORE_DIR与路径&#xff1a;D:\PLATF…

ModaHub魔搭社区:WinPlan垂直大模型数据采集

WinPlan经营大脑数据手动提交 数据采集模版创建后,用户可手动提交数据 数据批量导入 1、第一步:上传Excel 如何选择Excel本系统的批量导入支持选择任意相关的Excel,映射到数据采集模版的各列,即可实现批量导入;相关Excel可以是自行维护的相关数据、或从其他业务系统导出…

uniapp scroll-view横向滚动无效,scroll-view子元素flex布局不生效

要素排查&#xff1a; 1.scroll-x属性需要开启&#xff0c;官方类型是Boolean&#xff0c;实际字符串也行。 2scroll-view标签需要给予一个固定宽度&#xff0c;可以是百分百也可以是固定宽度或者100vw。 3.子元素需要设置display: inline-block&#xff08;行内块元素&#x…

React组件间数据传递(弹框和高阶组件(HOC)特性实现)

前言 在现代前端开发中&#xff0c;React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中&#xff0c;不同组件之间的数据传递问题显得尤为关键。在本文中&#xff0c;我们将探讨一种高效的方法&#xff0c;即如何利用弹框和高阶组件特性来实现 React 组件间的数据…

linux centos7 sort命令的学习与训练

sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项&#xff0c;这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上&#xff0c;sort命令可以被认为是一个非常强大的数据管理工具&#xff0c;用来管理内容类似数据库记录的文件。 sort…

Python代理池健壮性测试 - 压力测试和异常处理

大家好&#xff01;在构建一个可靠的Python代理池时&#xff0c;除了实现基本功能外&#xff0c;我们还需要进行一系列健壮性测试来确保其能够稳定运行&#xff0c;并具备应对各种异常情况的能力。本文将介绍如何使用压力测试工具以及合适的异常处理机制来提升Python代理池的可…

《深度学习计算机视觉 》书籍分享(包邮送书三本)

深度学习计算机视觉介绍 随着计算机技术的发展和进步&#xff0c;计算机视觉领域得到了广泛的关注和研究。而深度学习作为一种强大的机器学习方法&#xff0c;已经成为计算机视觉领域的重要工具之一。本文将介绍深度学习在计算机视觉中的应用和取得的成果。 深度学习是一种模…

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作&#xff0c;例如AJAX&#xff0c;setTimeout等等&#xff1b;也有很多事件&#xff0c;例如用户触发的点击事件&#xff0c;鼠标…

Nginx入门——Nginx的docker版本和windows版本安装和使用 代理的概念 负载分配策略

目录 引出nginx是啥正向代理和反向代理正向代理反向代理 nginx的安装使用Docker版本的nginx安装下载创建挂载文件获取配置文件创建docker容器拷贝容器中的配置文件删除容器 创建运行容器开放端口进行代理和测试 Windows版本的使用反向代理多个端口运行日志查看启动关闭重启 负载…