Pytorch基本使用—参数初始化

这篇具有很好参考价值的文章主要介绍了Pytorch基本使用—参数初始化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

✨ 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
假设我们有下面的网络(为了简单,全部以线性函数计算):
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
第一层计算为:
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
第二层计算为:
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
以参数W11和W12的反向传播为例,梯度为:
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
因为都是0,则梯度为0,则参数更新停止。

✨ 3 Xavier初始化

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

🎃 3.1 介绍

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

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

⛱️ 3.2 推导

这里我们以下列网络为例:
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习

首先看前向传播
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
方差为(这里应用概率论相关计算公式,需要注意的是这里Xi经过归一化,E(Xi)=0)
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
如果Xi和Wi独立同分布,那么D(a1)的最终公式为
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习
这里Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习代表着输入维度
而我们的目标是Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习,因此Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习


与上述计算方式一样,反向传播最终结果是Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习。只是这里,Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习是输出的维度大小。


但是Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习一般情况下是不同的,因此,这里采取一种折中的方式
Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习,我们让Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习在区间[a, b]上均匀采样(均匀分布)
结合均匀分布方差公式Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习,解出Xavier初始化采样范围为Pytorch基本使用—参数初始化,Pytorch使用,pytorch,人工智能,python,深度学习,机器学习

🎈 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:文章来源地址https://www.toymoban.com/news/detail-573037.html

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]])

到了这里,关于Pytorch基本使用—参数初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RestHighLevelClient初始化http参数的含义

    high-level-rest-client 初始化 一般初始化时需要设置验证信息、http相关参数; Http相关参数介绍 keepalive keepalive用以维护长连接,长连接可以复用,但一定情况下需要中断长连接,如长连接长时间没有被使用的场景,需要中断长连接来节省资源。如上述ES客户端初始化案例中,则是

    2024年02月12日
    浏览(55)
  • Servlet 初始化参数(web.xml和@WebServlet)

     

    2024年02月06日
    浏览(60)
  • Unity WebGL通过URL的形式接收参数执行初始化

    参考博客: http://t.csdnimg.cn/QnfhK 需要在外面的网页指定WebGL的打开初始化逻辑。 1.配置jslib,用文本文件创建即可,\\\"__Internal.jslib\\\"。 2.加入一段代码: 3.场景挂一个脚本,引用这个代码。 4.url中末尾用?输入需要传输的内容,能够传递。

    2024年01月23日
    浏览(54)
  • 线性表的基本操作(初始化、创建、增、删、查)

    目录 顺序表 顺序表的定义和初始化 顺序表的基本操作 1.求表长 2.判空操作 3.创建顺序表 4.输出操作 5.插入操作 6.删除操作 7.按位查找操作 8.按值查找操作 单链表 单链表的定义 单链表的初始化 求表长 判空操作  尾插法建立单链表 头插法建立单链表 输出操作 前插操作 后插

    2024年02月08日
    浏览(44)
  • 【机器学习300问】78、都有哪些神经网络的初始化参数方法?

            在训练神经网络时,权重初始化是确保良好收敛的关键步骤之一。不合适的初始化方法可能会导致梯度消失或爆炸,特别是在深层网络中。那么都有哪些神经网络的初始化参数方法呢?选择它这些方法的原则是什么?         关于随机初始化神经网络参数的方法

    2024年04月23日
    浏览(49)
  • 顺序表的基本操作(初始化,增,删,查,改等等)

    1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构, 常见的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性

    2024年02月03日
    浏览(42)
  • 多进程运行含有任意参数的函数、为什么multiprosessing会进行多次初始化

    目录 多进程运行含有任意个参数的函数,以map_async为例 为什么multiprocessing 的了进程会多次初始化?         使用偏函数:偏函数有点像数学中的偏导数,可以让我们只关注其中的某一个变量而不考虑其他变量的影响。 如以下代码中,我们要将set_seq、tokenizer和model作为变量

    2024年02月03日
    浏览(61)
  • C语言单链表实现初始化、创建、增、删、查等基本操作(详细)

    提示:文章参考王道的课程,相当于课程笔记 目录 一、单链表的定义及初始化 1、定义   2、初始化  1)不带头结点的单链表  2)带头节的单链表  二、单链表插入和删除 1)插入 1、按位序插入(带头结点) 2、按位插入(不带头结点)  3、指定结点的后插操作  4、指定结点

    2023年04月08日
    浏览(64)
  • vue3+js+viter+element UI+Axios项目初始化基本流程

    1 创建vue3项目 2 创建git代码管理仓库 2.1 创建本地管理仓库 2.2 创建远程仓库 3 初始化项目设置 3.1 安装项目所需要的依赖 3.2 完成别名联想设置 3.2.1 什么叫别名联想呢?(如果了解的话可以跳过这个标题) 3.2.2 设置别名联想 3.2.2.1 打开jsconfig.json文件 3.2.2.2 打开vite.config.js文件

    2024年03月27日
    浏览(70)
  • C语言 队列(循环队列和链队初始化进出队等基本操作)

    目录 一、队列的定义  二、循环队列 1、 循环队列的储存结构 2、初始化 3、输出队列元素 4、入队 5、出队 6、取队头元素 7、求队列长度 8、源代码 三、链式队列 1、队列的链式存储结构表示 2、初始化 3.输出队列元素 4.入队 5.出队 6.取队头元素 7. 源代码 总结 队列 (Queue)

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包