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的类中动态添加属性与生成对象
Sep 17 Python
python的多重继承的理解
Aug 06 Python
python实现神经网络感知器算法
Dec 20 Python
Python从零开始创建区块链
Mar 06 Python
python微信好友数据分析详解
Nov 19 Python
python如何统计代码运行的时长
Jul 24 Python
python实现图片上添加图片
Nov 26 Python
python实现智能语音天气预报
Dec 02 Python
python plotly画柱状图代码实例
Dec 13 Python
Python模块常用四种安装方式
Oct 20 Python
python实现学生信息管理系统源码
Feb 22 Python
从np.random.normal()到正态分布的拟合操作
Jun 02 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 二维数组排序保持键名不变
2019/03/06 PHP
php查询内存信息操作示例
2019/05/09 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
什么是JavaScript
2009/08/13 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
js实现移动端编辑添加地址【模仿京东】
2017/04/28 Javascript
vue+webpack实现异步组件加载的方法
2018/02/03 Javascript
Layui 动态禁止select下拉的例子
2019/09/03 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
[45:17]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第三场 1月9日
2021/03/11 DOTA
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python数据结构之图深度优先和广度优先实例详解
2015/07/08 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python制作爬虫抓取美女图
2016/01/20 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Python中Yield的基本用法
2020/10/18 Python
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
个人求职信范文分享
2014/01/06 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
解除租房协议书
2014/12/03 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书