Torch单独层赋值

2023-11-13

20230227 -

引言

对于torch中的权值初始化方式,以往都是采用默认的方式,或者利用初始化库里面的函数。但是如果想尝试一些自己的想法,那就必须自己来填充这部分数据,例如看到的内容,利用PCA的公式来对权值进行填充。

那么这里就必须对这个权值进行修改,但是查找了一下,发现很少有这部分内容,所以这里进行一些记录。但是总感觉我这个程序还是怪怪的,可能最后效果也不会好。

1. 权值的数据形状

为了拿到这个权值,可以使用state_dict这个函数,因为我这里使用的是sequential的形式定义的层,所以如果要拿到某一层的话,需要利用字典键值拿到某一层。

但是这里出现了一个问题,我是输入维度是128,输出是96,但这个权值矩阵的形状是(96,128),从这个数值上可以看到,他们是转置过的,但是毕竟不太清楚具体原理,所以还是查询了一下,在文章[1]中也说明了,确实是这样,而且他后续运算也是经过转置的。

在这里插入图片描述
好像我记得之前的时候,处理Keras权值的时候也存在这个问题。

同时因为我是用Sequential定义的层,实际上我可以通过数组的形式来提取这个权值,model.l[0]这样的形式,其中lSequential定义的。

2. 权值加载

一般为了训练模型的可复用,那么会经常保存模型,然后重新加载,这个采用saveload就足够了。这种一般你同一个定义的模型,他是不会出现什么错误的。不过当时我记得出现过一个GPU和CPU版本的问题,调整某个参数就可以了。

这里我的一个需求是,我需要把某个层的数值给进行修改,比如我就是要把某个层给设置成0,我可以直接用前面索引的形式[2],来进行复制

with troch.no_grad():
	model.l[0] = nn.Parameter(torch.zeros(96,128))

在这里插入图片描述

这个no_grad()是不是必须的,目前暂时不清楚,但是还是加上比较保险。

同时,如果想用state_dict()[‘key’]的形式来进行赋值,那么可以在no_grad()下采用copy_函数。

参考

[1]PyTorch - unexpected shape of model parameters weights
[2]How to set specific values for the weight and bias in a neural net?
[3]How to assign values to nn.Linear object

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Torch单独层赋值 的相关文章

随机推荐

  • vue3+vite中使用path-to-regexp以及相关的报错问题

    前言 path to regexp 该方法的作用是把字符串转为正则表达式 一般我们使用动态匹配路由的时候会用到这个 1 介绍path to regexp 更多点我查看 pathToRegexp pathToRegexp foo bar 打印
  • 重新学javaweb---JavaEE 监听器

    监听器 监听器就是一个java程序 功能是监听另一个java对象变化 方法调用 属性变更 实现 写一个类实现响应的接口 注册监听器 利用 web xml 8个监听器 分为了3种 一 用来监听三大作用域的创建和销毁的监听器 除了page域 1
  • ResNeXt创新点解析

    Aggregated Residual Transformations for Deep Neural Networks 1 亮点 利用分组卷积 构建一种平行堆叠相同拓扑结构的block 在不明显增加参数的情况下提升了准确率 结构简单 具有
  • 数学常数

    符号 值 名称 OEIS 3 14159 26535 89793 23846 26433 83279 50288 圆周率 e 2 71828 18284 59045 23536 02874 71352 66249
  • 解决org.bson.codecs.configuration.CodecConfigurationException:Cant find a codec for java.sql.date

    Mongo数据库Document 对象转为jsonObject对象时 使用toJson方法报错 org bson codecs configuration CodecConfigurationException Cant find a co
  • Unity 2019 安装教程

    Unity 2019 安装教程 一 安装包准备 Unity 2019 x Unity Hub 点此下载 二 安装 双击上面两个安装包 执行安装 全部默认选项 三 激活 虽然unity可以是免费软件 但仍需要进行激活方可使用 步骤如下 1 双
  • c/c++ NV12转I420P

    NV12及I420格式不再赘述 下面代码只适用width与stride相等的情况 如果stride与width不相等的时候 需要按照步长计算 思路1 重新new一块I420buff 把nv12中UV分量分别复制到I420对应的位置中 i42
  • SpringCloud——分布式为什么越来越热门

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 服
  • 黑群辉DSM 6.2.3 系统安装

    修改引导程序配置文件 首先我们可以使用ChipEasy芯片无忧查找U盘的VID和PID 以下图为例 这个U盘的VID是0930 PID是6544 请记录好这两个值 下面修改配置文件需要用到 逻辑盘符 E 此分区容量 7 2G 设备ID VI
  • java归并两个无序链表并排序_java编程题之合并两个排序的链表

    本文实例为大家分享了java合并两个排序的链表 供大家参考 具体内容如下 剑指offer编程题 JAVA实现 第16题 合并两个排序的链表 输入两个单调递增的链表 输出两个链表合成后的链表 当然我们需要合成后的链表满足单调不减规则 publ
  • mysql year使用_MySQL YEAR()用法及代码示例

    MySQL中的YEAR 函数用于查找给定日期的年份 如果日期为NULL 则YEAR 函数将返回NULL 否则 它将返回从1000到9999的值范围 用法 YEAR date 参数 此方法接受上面提到的和下面描述的一个参数 date 我们要从
  • 数据库中用户登录注册用户信息表怎么设计如何设计

    用户登录 站内登录 用户信息 密码的验证形式 用户名 密码 手机 密码 站外授权 第三方登录 其实它也是用户信息 密码的形式 用户信息即第三方系统中的ID 第三方登录一定会给一个在他们系统中的唯一标识 密码即access token 只不过
  • PaddleX ERROR: Unexpected BUS error encountered in DataLoader worker

    ERROR Unexpected BUS error encountered in DataLoader worker This might be caused by insufficient shared memory shm 原因 设置
  • C#字典树(字母树)的模板

    保存一下JimLiu大神的 既然JimLiu大神的这个 net博客不维护了 我就搬过来了 哈哈哈 希望JimLiu大神不要见怪
  • MFC 生成可执行的exe

    1 工程右键选择属性 2 配置 C 选择
  • 【华为OD机试】数据最节约的备份方法(C++ Python Java)2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • 刷脸支付短时间渗透到生活的方方面面

    让我们来设想一下这样的场景 你早上匆匆忙忙赶着出门买东西却忘记带手机 没关系 带脸就OK 腾出两只手拎更多的战利品 在结账时候刚好客户打来电话 挂掉又不礼貌 没关系 刷脸支付只需要一个确认的眼神 还有很多方面 刷脸支付将像当年的支付宝一样
  • 二进制搭建以太坊2.0节点-2023最新详细版文档

    文章目录 一 配置 JWT 认证 二 部署执行节点geth 2 1 下载geth二进制文件 2 2 geth节点启动 三 部署共识节点Prysm 3 1 下载Prysm脚本 3 2 Prysm容器生成 四 检查节点是否同步完成 4 1 检查
  • QT中edit控件限制输入数值以及进制转换方法

    利用正则表达式限制输入内容 限制输入 ui gt edit 2 gt setValidator new QRegExpValidator QRegExp 0 1 输入0跟1 ui gt edit 8 gt setValidator new
  • Torch单独层赋值

    20230227 引言 对于torch中的权值初始化方式 以往都是采用默认的方式 或者利用初始化库里面的函数 但是如果想尝试一些自己的想法 那就必须自己来填充这部分数据 例如看到的内容 利用PCA的公式来对权值进行填充 那么这里就必须对这个