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正则表达式的使用范例详解
Aug 08 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Python探索之URL Dispatcher实例详解
Oct 28 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
Python一键安装全部依赖包的方法
Aug 12 Python
python-numpy-指数分布实例详解
Dec 07 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python数组拼接np.concatenate实现过程
Apr 18 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 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
PHP 采集程序 常用函数
2008/12/18 PHP
php中stdClass的用法分析
2015/02/27 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
jQuery源码中的chunker 正则过滤符分析
2012/07/31 Javascript
用JavaScript实现对话框的教程
2015/06/04 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
JSONP基础知识详解
2017/03/19 Javascript
详解angular 中的自定义指令之详解API
2017/06/20 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
JS滚轮控制图片缩放大小和拖动的实例代码
2018/11/20 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
Python Socket编程详细介绍
2017/03/23 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
2019/03/20 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Python中bisect的使用方法
2019/12/31 Python
护理学专业推荐信
2013/12/03 职场文书
大学军训感言200字
2014/02/26 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
公安交警中队队长个人对照检查材料思想汇报
2014/10/05 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
物资采购管理制度
2015/08/06 职场文书
心理健康教育主题班会
2015/08/13 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
2019年妇科护士的自我鉴定(3篇)
2019/09/26 职场文书
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js