pytorch:常见的pytorch参数初始化方法总结

news/2024/4/29 3:25:06/文章来源:https://blog.csdn.net/tywwwww/article/details/127445529

pytorch参数初始化

    • 1. 关于常见的初始化方法
      • 1) 均匀分布初始化torch.nn.init.uniform_()
      • 2) 正态分布初始化torch.nn.init.normal_()
      • 3) 常量初始化torch.nn.init.constant_()
      • 4) Xavier均匀分布
      • 5)Xavier正态分布初始化
      • 6) kaiming均匀分布初始化
      • 7) kaiming正态分布初始化
      • 8) 单位初始化(在优化一些转换矩阵的时候可能会用到)
      • 9)正交初始化
      • 10) 自定义初始化

1. 关于常见的初始化方法

1) 均匀分布初始化torch.nn.init.uniform_()

torch.nn.init.uniform_(tensor, a=0.0, b=1.0)

使输入的张量服从(a,b)的均匀分布并返回。

2) 正态分布初始化torch.nn.init.normal_()

torch.nn.init.normal_(tensor, mean=0.0, std=1.0)

从给定的均值和标准差的正态分布N(mean,std)中生成值,初始化张量。

3) 常量初始化torch.nn.init.constant_()

torch.nn.init.constant_(tensor, val)

以一确定数值初始化张量。

4) Xavier均匀分布

torch.nn.init.xavier_uniform_(tensor, gain=1.0)

从均匀分布U(−a, a)中采样,初始化输入张量,其中a的值由如下公式确定,

公式中的gain值根据不同的激活函数确定
在这里插入图片描述

5)Xavier正态分布初始化

torch.nn.init.xavier_normal_(tensor, gain=1.0)

在这里插入图片描述

6) kaiming均匀分布初始化

torch.nn.init.kaiming_uniform_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

7) kaiming正态分布初始化

torch.nn.init.kaiming_normal_(tensor, a=0, mode='fan_in', nonlinearity='leaky_relu')

在这里插入图片描述

[1]https://www.cxyzjd.com/article/CQUSongYuxin/110928126

8) 单位初始化(在优化一些转换矩阵的时候可能会用到)

torch.nn.init.eye_(tensor)

9)正交初始化

torch.nn.init.orthogonal_(tensor, gain=1)

10) 自定义初始化

在搭建模型的时候 会 遇到需要自己自定义初始化数据的时候

class ResidualBlockNoBN(nn.Module):"""Residual block without BN.It has a style of:::---Conv-ReLU-Conv-+-|________________|Args:mid_channels (int): Channel number of intermediate features.Default: 64.res_scale (float): Used to scale the residual before addition.Default: 1.0."""def __init__(self, mid_channels=64, res_scale=1.0):super().__init__()self.res_scale = res_scaleself.conv1 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=True)self.conv2 = nn.Conv2d(mid_channels, mid_channels, 3, 1, 1, bias=True)self.relu = nn.ReLU(inplace=True)# if res_scale < 1.0, use the default initialization, as in EDSR.# if res_scale = 1.0, use scaled kaiming_init, as in MSRResNet.if res_scale == 1.0:self.init_weights()# 直接在__init__函数中使用def init_weights(self):"""Initialize weights for ResidualBlockNoBN.Initialization methods like `kaiming_init` are for VGG-stylemodules. For modules with residual paths, using smaller std isbetter for stability and performance. We empirically use 0.1.See more details in "ESRGAN: Enhanced Super-Resolution GenerativeAdversarial Networks""""# 初始化需要初始化的layerfor m in [self.conv1, self.conv2]:nn.init.kaiming_uniform_(m.weight, a=0, mode='fan_in', nonlinearity='relu')m.weight.data *= 0.1nn.init.constant_(m.bias, 0)def forward(self, x):"""Forward function.Args:x (Tensor): Input tensor with shape (n, c, h, w).Returns:Tensor: Forward results."""identity = xx=self.conv1(x)x=self.relu(x)out = self.conv2(x)return identity + out * self.res_scale

总之,参数初始化就是 给 参数附上需要的数值而已,
比如:

# 创建一个卷积层,它的权值是默认kaiming初始化的
w=torch.nn.Conv2d(2,2,3,padding=1)
print(w.weight)# 先创建一个自定义权值的Tensor,这里为了方便只创建一个简单的tensor, 将所有权值设为1
ones=torch.Tensor(np.ones([2,2,3,3])) 
# 当然也可以不使用numpy,直接torch.ones
ones=torch.ones((2,2,3,3))# 把Tensor的值作为权值赋值给Conv层,这里需要先转为torch.nn.Parameter类型,否则将报错
w.weight=torch.nn.Parameter(ones) 

[2]https://ptorch.com/docs/1/nn-init
[3]https://blog.csdn.net/goodxin_ie/article/details/84555805
关于初始化参数的理论介绍可以参考
[4]https://zhuanlan.zhihu.com/p/25110150

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

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

相关文章

除了pid还有什么控制算法,类似pid算法还有哪些

什么是专家PID&#xff1f;他和传统的PID有什么区别&#xff1f; PID是智能控制啊,比如要控制一个水管的水流量,通过流量计,开关阀,让PID来控制开关阀的开关大小使水流量正确.专家PID记得是PID的高级设置,某些个场合一般的PID无法使用,出现了了专用的,有特殊功能的.记忆中是这…

防火墙的ISP选路

拓补图&#xff1a; 实验目的&#xff1a; 让R1走ISP1的路径访问192.168.1.1&#xff0c;R2走ISP2的路径访问172.16.1.1 1. IP地址的配置略 2. 防火墙区域的划分&#xff08;防火墙的g1/0/2接口是属于ISP1接口&#xff0c;所以需要自己新建一个区域然后添加接口&#xff0c;…

测试界的飞虎队:测试人才战略——测试行业的精英战略(学习了)

一、前言 提到飞虎队&#xff0c;大家第一印象就是精英。相信绝大多数公司都希望能组件出一支优秀的测试队伍&#xff0c;来支撑自己的业务&#xff0c;很多公司都喊出了精英化战略。既然如此&#xff0c;就命中一个话题--测试人才战略。 有几个问题是不得不面对的&#xff1a…

算法 - 组合

目录 题目来源 题目描述 示例 提示 题目解析 算法源码 剪枝优化 题目来源 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 输入&#…

JavaScript——关于JavaScript、在HTML中嵌入JS代码的三种方式、变量

前言 近日无意间透过装了热水之后&#xff0c;散发出水蒸气的透明水杯看东西时&#xff0c;发现看到的东西呈现模糊效果&#xff0c;这种效果和毛玻璃效果类似。毛玻璃效果在web、手机系统上也有很多应用&#xff0c;如网页上的广告弹窗&#xff0c;手机系统的消息通知界面等等…

LeetCode刷题复盘笔记——131. 分割回文串(一文搞懂回溯解决经典的分割回文串问题)

今日主要总结一下&#xff0c;131. 分割回文串 题目&#xff1a;131. 分割回文串 Leetcode题目地址 题目描述&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读…

目标检测——day46 可转移交互性知识的人机交互检测

Transferable Interactiveness Knowledge for Human-Object Interaction Detection论文pdf下载&#xff08;含笔记&#xff09;Transferable Interactiveness Knowledge for Human-Object Interaction Detection1 INTRODUCTION3 PRELIMINARY4 METHOD4.1 Overview4.2 Representa…

JVM——类加载子系统

文章目录一、类加载器子系统作用二、类加载过程1、加载&#xff08;Loading&#xff09;2、验证&#xff08;Verification&#xff09;3、准备&#xff08;Preparation&#xff09;4、解析&#xff08;Resolution&#xff09;5、初始化&#xff08;Initialization&#xff09;三…

SpringCloud微服务实践之三 创建子项目UserService

创建子项目UserService&#xff0c;并将服务注册到Eureka UserService子项目作为用户信息的服务提供方&#xff0c;通过本项目&#xff0c;可以实现对基于Docker运行的mysql数据库表的读取。 1、在父项目上点击鼠标右键选择new→Module&#xff1a; 过程同上&#xff0c;略过…

基于jeecgboot的flowable驳回修改以及发起人设置

昨晚升级代码生成器&#xff0c;支持生成权限注解和菜单的SQL,修改驳回bug,以后保存流程强制要求第一个用户任务节点必须是发起人节点。 1、前端增加发起人设置 <el-radio label"INITIATOR">发起人</el-radio> 相应代码 if (this.containsKey(this.bpmn…

MybatisPlus【SpringBoot】 3 基本CRUD

MybatisPlus【SpringBoot】 【【尚硅谷】2022版MyBatisPlus教程&#xff08;一套玩转mybatis-plus&#xff09;】 3 基本CRUD 文章目录MybatisPlus【SpringBoot】3 基本CRUD3.1 BaseMapper3.2 插入3.3 删除3.3.1 通过id 删除记录3.3.2 通过id 批量删除记录3.3.3 通过map 条件…

【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定

文章目录Each 块绑定媒体标签绑定尺寸绑定this组件绑定Each 块绑定 您也可以在 Each 的过程中使用。 不过需要注意的是&#xff0c;与这些 <input> 交互会改变数组。当要使用不可变数据&#xff0c;应该去避免使用这些绑定&#xff0c;并且改用事件来处理这些内容。 <…

nvm切换node版本

在实际的前端开发过程中&#xff0c;可能会经常遇见 node.js 的版本问题&#xff0c;不同的项目需要使用不同的 node.js 版本。比如Vue2和Vue3需要的Node版本不一样。 地址&#xff1a;https://github.com/coreybutler/nvm-windows/releases 注意&#xff1a;安装之前必须完…

[LCT刷题][树链信息维护] P4332 [SHOI2014]三叉神经树

写在前面 把黑题看成蓝题结果想了老半天感觉不对劲 本题对于理解SplaySplaySplay和LCTLCTLCT结构具有至关重要的意义&#xff0c;值得反复思考。 可能因为我比较菜 题目思路 题目给定一个类似神经网络的东西&#xff0c;每个节点都具有激活层、三输入单输出&#xff0c;输…

node.js+vue+Web的疫情大数据平台分析系统

以往的疫情防控管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量的文本文件与文本数据&#xff0c;这对事务的查询、更新以及维护带来不少困难。随着互联网时代的…

Google共码未来 与 C站 创造者的经历

本人仅参加一天活动 2022.9.14&#xff1b;吃喝拉撒全免费哈哈哈 大会主题&#xff1a;共码未来 looker、chromium、wouldnt、jetpack looker https://blog.csdn.net/WebEye_Marketing/article/details/116047404 chromium https://blog.csdn.net/arv002/article/details/1…

SEO和SEM的区别是什么,哪个效果更好一些

SEO指的是搜索引擎优化&#xff0c;SEM指的是搜索引擎影响&#xff0c;那么SEO和SEM的区别具体是什么&#xff1f;对于初创业的企业来说&#xff0c;哪个更好呢&#xff1f;下面&#xff0c;本文将介绍SEO和SEM的区别&#xff0c;帮助企业和公司网络人员理清这两者的优劣势。 S…

【力扣刷题】Day31——DP专题

文章目录七、子序列问题&#xff08;线性DP and 区间DP&#xff09;1、子序列&#xff08;不连续&#xff09;29.最长递增子序列&#xff08;LIS&#xff09;30. 最长公共子序列 &#xff08;LCS&#xff09;31.不相交的线2、子序列&#xff08;连续&#xff09;32. 最长连续递…

C语言中的指针

一。什么是指针&#xff1f; 在计算机科学中&#xff0c;指针&#xff08;Pointer&#xff09;是编程语言中的一个对象&#xff0c;利用地址&#xff0c;它的值直接指向&#xff08;points to&#xff09;存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元&a…

一棋盘的麦子

14天阅读挑战赛 有一个古老的传说&#xff0c;一位国王的女儿不幸落水&#xff0c;水中有很多鳄鱼&#xff0c;国王情急之下下令&#xff1a; 来&#xff0c;就把女儿嫁给他。”很多人纷纷退让&#xff0c;一个勇敢的小伙子挺身而出&#xff0c;冒着生命危险把公 一看是个穷小子…