pytorch自定义初始化权重的方法


Posted in Python onAugust 17, 2019

在常见的pytorch代码中,我们见到的初始化方式都是调用init类对每层所有参数进行初始化。但是,有时我们有些特殊需求,比如用某一层的权重取优化其它层,或者手动指定某些权重的初始值。

核心思想就是构造和该层权重同一尺寸的矩阵去对该层权重赋值。但是,值得注意的是,pytorch中各层权重的数据类型是nn.Parameter,而不是Tensor或者Variable。

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np
 
# 第一一个卷积层,我们可以看到它的权值是随机初始化的
w=torch.nn.Conv2d(2,2,3,padding=1)
print(w.weight)
 
 
# 第一种方法
print("1.使用另一个Conv层的权值")
q=torch.nn.Conv2d(2,2,3,padding=1) # 假设q代表一个训练好的卷积层
print(q.weight) # 可以看到q的权重和w是不同的
w.weight=q.weight # 把一个Conv层的权重赋值给另一个Conv层
print(w.weight)
 
# 第二种方法
print("2.使用来自Tensor的权值")
ones=torch.Tensor(np.ones([2,2,3,3])) # 先创建一个自定义权值的Tensor,这里为了方便将所有权值设为1
w.weight=torch.nn.Parameter(ones) # 把Tensor的值作为权值赋值给Conv层,这里需要先转为torch.nn.Parameter类型,否则将报错
print(w.weight)

附:Variable和Parameter的区别

Parameter 是torch.autograd.Variable的一个字类,常被用于Module的参数。例如权重和偏置。

Parameters和Modules一起使用的时候会有一些特殊的属性。parameters赋值给Module的属性的时候,它会被自动加到Module的参数列表中,即会出现在Parameter()迭代器中。将Varaible赋给Module的时候没有这样的属性。这可以在nn.Module的实现中详细看一下。这样做是为了保存模型的时候只保存权重偏置参数,不保存节点值。所以复写Variable加以区分。

另外一个不同是parameter不能设置volatile,而且require_grad默认设置为true。Varaible默认设置为False.

参数:

parameter.data 得到tensor数据

parameter.requires_grad 默认为True, BP过程中会求导

Parameter一般是在Modules中作为权重和偏置,自动加入参数列表,可以进行保存恢复。和Variable具有相同的运算。

我们可以这样简单区分,在计算图中,数据(包括输入数据和计算过程中产生的feature map等)时variable类型,该类型不会被保存到模型中。 网络的权重是parameter类型,在计算过程中会被更新,将会被保存到模型中。

以上这篇pytorch自定义初始化权重的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现统计代码行数的方法
May 22 Python
python开发之函数定义实例分析
Nov 12 Python
python利用正则表达式提取字符串
Dec 08 Python
python正则表达式之对号入座篇
Jul 24 Python
python3 拼接字符串的7种方法
Sep 12 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python的条件锁与事件共享详解
Sep 12 Python
python列表的逆序遍历实现
Apr 20 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
用 Python 制作地球仪的方法
Apr 24 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 #Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 #Python
pyenv与virtualenv安装实现python多版本多项目管理
Aug 17 #Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
Aug 17 #Python
关于PyTorch源码解读之torchvision.models
Aug 17 #Python
django项目用higcharts统计最近七天文章点击量
Aug 17 #Python
Django对models里的objects的使用详解
Aug 17 #Python
You might like
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
Codeigniter的一些优秀特性总结
2015/01/21 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
PHP与Web页面的交互示例详解二
2020/08/04 PHP
jquery fancybox ie6不显示关闭按钮的解决办法
2013/12/25 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
js中 javascript:void(0) 用法详解
2015/08/11 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
javaScript中indexOf用法技巧
2019/11/26 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
原生js实现点击按钮复制内容到剪切板
2020/11/19 Javascript
Python中删除文件的程序代码
2011/03/13 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
外企财务年会演讲稿
2014/01/03 职场文书
经济管理专业求职信
2014/06/09 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
医院科室评语
2015/01/04 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python