Pytorch基本使用—参数初始化

news2024/10/7 17:26:06

深度学习模型参数初始化是指在训练深度神经网络时,对网络的权重和偏置进行初始化的过程。合适的参数初始化可以加速模型的收敛,并提高模型的性能。

✨ 1 基本介绍

在深度学习中,常用的参数初始化方法有以下几种:

  1. 零初始化(Zero Initialization):将所有权重和偏置初始化为0。然而,这种方法会导致所有神经元具有相同的输出,无法破坏对称性,因此不常用。
  2. 随机初始化(Random Initialization):将权重和偏置随机初始化为较小的随机值。这种方法可以打破对称性,但并不能保证初始化的权重和偏置能够适应网络的输入和输出分布。
  3. Xavier初始化(Xavier Initialization):根据每一层的输入维度和输出维度的大小来进行初始化。Xavier初始化方法根据激活函数的导数和输入输出的维度来调整初始化的范围,使得每一层的激活值保持在一个合适的范围内。
  4. He初始化(He Initialization):类似于Xavier初始化,但在计算权重的标准差时,将输入维度除以2。这是由于ReLU等非线性激活函数的性质导致的。
  5. 预训练初始化(Pretraining Initialization):在某些情况下,可以使用预训练的模型参数来初始化新的模型。例如,利用在大规模数据集上预训练的模型参数来初始化新任务的模型,可以加快模型的收敛速度。

需要注意的是,不同的参数初始化方法适用于不同的网络架构和激活函数。在实际应用中,需要根据具体情况选择适当的参数初始化方法。此外,还可以通过调整学习率和正则化等技巧来进一步优化训练过程。

✨ 2 零初始化(不常用)

🎈 2.1 理论

这里主要分析一下神经网络为什么不能将参数全部初始化为0
假设我们有下面的网络(为了简单,全部以线性函数计算):

第一层计算为:
在这里插入图片描述
第二层计算为:
在这里插入图片描述
以参数W11和W12的反向传播为例,梯度为:
在这里插入图片描述
因为都是0,则梯度为0,则参数更新停止。

✨ 3 Xavier初始化

第二节我们简单总结了为什么神经网络参数不能输出化为0,接下来我们讨论Xavier初始化。

🎃 3.1 介绍

在神经网络中,每个神经元的输入是由上一层的神经元输出和权重参数决定的。如果权重参数初始化过大,会导致输入值变得很大,从而使得激活函数的导数趋近于0,造成梯度消失问题。相反,如果权重参数初始化过小,会导致输入值变得很小,从而使得激活函数的导数趋近于1,造成梯度爆炸问题。

Xavier初始化通过根据网络层的输入和输出维度来合理地初始化权重参数,使得权重参数的方差保持在一个相对稳定的范围内。这样可以避免梯度消失和梯度爆炸问题,有助于提高网络的训练效果。

⛱️ 3.2 推导

这里我们以下列网络为例:
在这里插入图片描述

首先看前向传播
在这里插入图片描述
方差为(这里应用概率论相关计算公式,需要注意的是这里Xi经过归一化,E(Xi)=0)
在这里插入图片描述
如果Xi和Wi独立同分布,那么D(a1)的最终公式为
在这里插入图片描述
这里在这里插入图片描述代表着输入维度
而我们的目标是在这里插入图片描述,因此在这里插入图片描述


与上述计算方式一样,反向传播最终结果是在这里插入图片描述。只是这里,在这里插入图片描述是输出的维度大小。


但是在这里插入图片描述在这里插入图片描述一般情况下是不同的,因此,这里采取一种折中的方式
在这里插入图片描述,我们让在这里插入图片描述在区间[a, b]上均匀采样(均匀分布)
结合均匀分布方差公式在这里插入图片描述,解出Xavier初始化采样范围为在这里插入图片描述

🎈 3.3 构造

torch.nn.init.xavier_uniform_(tensor, a=0, b=1)
  1. tensor:需要填充的张量
  2. a:均匀分布的下界
  3. b:均匀分布的上界

☃️ 3.4 例子

w = torch.empty(3, 5)
nn.init.uniform_(w)

result:

tensor([[0.2116, 0.3085, 0.5448, 0.6113, 0.7697],
        [0.8300, 0.2938, 0.4597, 0.4698, 0.0624],
        [0.5034, 0.1166, 0.3133, 0.3615, 0.3757]])

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

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

相关文章

SwinIR Transformer训练教程(使用自己的数据集)

使用自己的数据集训练SwinIR Transformer SwinIR Transformer图像超分辨率重建训练教程 目录 使用自己的数据集训练SwinIR Transformer一、使用MATLAB对数据集进行BICUBIC插值下采样二、使用MATLAB对数据集进行BICUBIC插值下采样三、训练3.1 下载训练源代码3.2 修改json文件3.…

Servlet文档1

Servlet 1、如何去书写一个servlet2、如何去访问一个servlet3、如何去快速创建一个servlet4、web中一些路径的访问分析5、servlet一些配置项(servletConfig)6、web项目的配置项(servletContext)servlet简介 Servlet 是sun公司提供…

记录一次unraid中毒经历(xmrig)

起因 :一大早发现unraid小主机风扇狂转,CPU一半线程拉满 类似这样,只不过是左边一列所有核 执行top命令,发现xmrig占用 cpu 790 kill [ID] find / -name xmrig rm /bin/xmrig成功,CPU功耗马上下降,但是几…

k8s 就绪探针

【k8s 系列】k8s 学习二十,就绪探针 提起探针,不知兄dei 们是否有印象,之前我们分享过存活探针,分享存活探针是如何确保异常容器自动重启来保持应用程序的正常运行,感兴趣的可以查看文章 k8s 系列k8s 学习十七&#x…

揭示实时定位控件在配送小程序中的作用与价值

随着互联网技术的发展,配送小程序在生活中扮演着越来越重要的角色。而实时定位控件作为配送小程序中不可或缺的一部分,具有极大的作用与必要性。本文将以【乔拓云】第三方工具为例子,从商家的方面,对实时定位控件在配送小程序中的…

我说MySQL每张表最好不超过2000万条数据,面试官让我回去等通知?

事情是这样的 下面是我朋友的面试记录: 面试官:讲一下你实习做了什么。 朋友:我在实习期间做了一个存储用户操作记录的功能,主要是从MQ获取上游服务发送过来的用户操作信息,然后把这些信息存到MySQL里面,…

怎么在unity3D工程中导入Newtonsoft.Json

怎么在unity3D工程中导入Newtonsoft.Json unity旧版本自带的json接口太难用了(JsonUtility),不能序列化字典和列表等对象,只能序列化基础类型对象,所以基本等于没有。 Newtonsoft.Json-for-Unity-master 的github下载…

【Linux后端服务器开发】Shell外壳——命令行解释器

目录 一、Shell外壳概述 二、描述Shell外壳原理的生动例子 三、C语言模拟实现Shell外壳 一、Shell外壳概述 在狭义上 , 我们称Linux操作系统的内核为 Linux 在广义上 , Linux发行版 Linux内核 外壳程序 就比如市面上现在的redhat, centos, ubuntu等等我们耳熟能详的Linux发…

一文教会你风格迁移CycleGAN从入门到高阶再到最终成功魔改(附成功魔改代码)

专栏导读 🔥🔥本文已收录于专栏:《风格迁移之从入门到成功魔改》,欢迎免费订阅 ​此专栏用于带你从零基础学会什么是风格迁移,风格迁移有什么作用,传统做法和Cyclegan的原理,及其优缺点&#x…

Docker NGINX 加载Geoip模板

前提环境: Docker 环境 涉及参考文档: ngx_http_geoip_module 模块Loki NGINX Service MeshGeoIP IP库 一、下载GeoIP IP库 二、配置Nginx主配置文件 vim /data/nginx/MangoMoh/dos/nginx.confuser nginx; worker_processes auto;error_log /var…

ncnn源码阅读(三)----数据结构Mat

文章目录 数据结构Mat成员变量成员方法构造函数1、普通构造函数2、外部数据指针构造函数3、拷贝构造函数和opertor 深拷贝函数类型转换引用计数的实现其他数据操作函数 数据结构Mat 个人认为一个框架中的比较核心的两个点,一个是数据结构,一个任务调度…

STM32F407ZGT6正点原子F4探索者开发板 -- 跑马灯例程

1. USB 转USART1 烧录工具 FlyMcu 2. FlyMcu 配置 3. 查看开发板原理图,LED0、LED1 硬件连接 LED0 - PF9 LED1 - PF10 PF9 0, LED0 亮,PF9 1,LED0 灭 PF10 0, LED1 亮,PF10 1,LED1 灭 4.…

cesium 实现多颗卫星与多颗地面站雷达通信效果

最主要的部分是计算空间内两点之间的距离以及卫星对地点是否在雷达扫描范围内 先看效果 1.计算空间内两点之间的距离 //计算距离 function distance(point1, point2) {var point1cartographic = Cesium.Cartographic.fromCartesian(point1);var</

医师访问学者申请需要注意什么?

医师访问学者申请是医学领域中一项重要的学术交流和合作方式。在准备申请时&#xff0c;有几个关键点需要注意&#xff0c;下面就随知识人网小编一起来看一看。 1. 目标和动机&#xff1a;明确访问学者的目标和动机&#xff0c;例如学术研究、专业发展、文化交流等。清楚表达你…

产品经理学习画原型-登录界面(交互样式设置)

经过第一阶段学习&#xff0c;目前效果如下&#xff1a; 下面我们来加入交互样式效果&#xff1a; 效果&#xff1a;

[SSM]MyBatis的缓存与逆向工程

目录 十三、MyBatis的缓存 13.1一级缓存 13.2二级缓存 13.3MyBatis集成EhCache 十四、MyBatis的逆向工程 14.1逆向工程配置与生成 14.2测试 十三、MyBatis的缓存 缓存&#xff1a;cache 缓存的作用&#xff1a;通过减少IO的方式&#xff0c;来提高程序的执行效率。 myb…

【分布式】 ELK 企业级日志分析系统 二

目录 一、FilebeatELK 部署1.1 环境部署 二、grok 正则捕获插件mutate 数据修改插件multiline 多行合并插件date 时间处理插件 一、FilebeatELK 部署 1.1 环境部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.137.101 Elasticsearch Node2节点&…

【C++顺序容器】forward_list的成员函数和非成员函数

目录 forward_list 1. forward_list的成员函数 1.1 构造、析构和赋值运算符重载 1.1.1 构造函数 1.1.2 析构函数 1.1.3 赋值运算符重载 1.2 迭代器 1.3 容量 1.4 元素访问 1.4.1 遍历方法 1.5 修改器 1.6 操作 1.7 观察者 2. forward_list的非成员函数 forward_l…

npm5中本地间模块引用的最好方式(附带引用方法总结)

引用其他的包 正常情况下在项目 package.json 所在的目录&#xff08;一般也是项目根目录&#xff09;运行npm install xxxx 命令之后&#xff0c;会从远程或者代理地址下载xxxx包到node_modules&#xff0c;然后在package.json生成对应的包名和版本 如果想要依赖本地自己开发…

TypeScript 学习笔记(一):类型

文章目录 一、常见类型1. 数组2. 布尔3. 数值4. 字符串5. object6. null 和 undefined7. symbol7.1 作为属性名7.2 属性名遍历7.3 静态方法&#xff1a;Symbol.for()和 Symbol.keyFor()7.4 内置 symbol 值7.4.1 Symbol.hasInstance7.4.2 Symbol.isConcatSpreadable7.4.3 Symbol…