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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
python使用Plotly绘图工具绘制散点图、线形图
Apr 02 Python
Python单元和文档测试实例详解
Apr 11 Python
python实现银联支付和支付宝支付接入
May 07 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
python内存管理机制原理详解
Aug 12 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
Python调用Redis的示例代码
Nov 24 Python
python urllib库的使用详解
Apr 13 Python
发工资啦!教你用Python实现邮箱自动群发工资条
May 10 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目录导航文件代码
2006/10/09 PHP
php GeoIP的使用教程
2011/03/09 PHP
php写的简易聊天室代码
2011/06/04 PHP
php实现简单洗牌算法
2013/06/18 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
window.name代替cookie的实现代码
2010/11/28 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
深入学习Python中的装饰器使用
2016/06/20 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
python多进程控制学习小结
2018/10/31 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
tensorflow使用指定gpu的方法
2020/02/04 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
Hunkemöller西班牙:欧洲最大的内衣连锁店
2018/08/15 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
淘宝好评语大全
2014/05/05 职场文书
经典团队口号
2014/06/06 职场文书
学校党支部承诺书
2015/04/30 职场文书
格林童话读书笔记
2015/06/30 职场文书
清明扫墓感想
2015/08/11 职场文书
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android