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 25 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
python处理xml文件的方法小结
May 02 Python
Python操作MySQL数据库的方法
Jun 20 Python
Python3 log10()函数简单用法
Feb 19 Python
Python中最大递归深度值的探讨
Mar 05 Python
超简单使用Python换脸实例
Mar 27 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
解决更改AUTH_USER_MODEL后出现的问题
May 14 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
python如何使用腾讯云发送短信
Sep 17 Python
python利用后缀表达式实现计算器功能
Feb 22 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通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
2016/03/21 PHP
基于php实现的验证码小程序
2016/12/13 PHP
IE 下的只读 innerHTML
2009/08/21 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JavaScript面向对象设计二 构造函数模式
2011/12/20 Javascript
基于jquery的放大镜效果
2012/05/30 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
jQuery树形下拉菜单特效代码分享
2015/08/15 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
2020/08/03 Javascript
解决vue2中使用elementUi打包报错的问题
2020/09/22 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
利用Python演示数型数据结构的教程
2015/04/03 Python
python开发之函数定义实例分析
2015/11/12 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python 3.8正式发布,来尝鲜这些新特性吧
2019/10/15 Python
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
生产部统计员岗位职责
2014/01/05 职场文书
继承权公证书
2014/04/09 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
2014年党务公开方案
2014/05/08 职场文书
部门活动策划方案
2014/08/16 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书