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 27 Python
从Python的源码浅要剖析Python的内存管理
Apr 16 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
python中使用psutil查看内存占用的情况
Jun 11 Python
Python3.0 实现决策树算法的流程
Aug 08 Python
python sorted方法和列表使用解析
Nov 18 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
Dec 18 Python
Python tornado上传文件的功能
Mar 26 Python
django教程如何自学
Jul 31 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
python之django路由和视图案例教程
Jul 26 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
VOLVO车载收音机
2021/03/02 无线电
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
apache和PHP如何整合在一起
2015/10/12 PHP
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
javascript div 弹出可拖动窗口
2009/02/26 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
jquery获得当前html页面源码的方法
2015/07/14 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
Bootstrap前端开发案例一
2016/06/17 Javascript
JavaScript ES6的新特性使用新方法定义Class
2016/06/28 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
[48:54]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第二场 6.3
2018/06/04 DOTA
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
使用tensorflow实现线性回归
2018/09/08 Python
python中matplotlib条件背景颜色的实现
2019/09/02 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
英国袜子店:Sock Shop
2017/01/11 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
高一生物教学反思
2014/01/17 职场文书
教师绩效考核方案
2014/01/21 职场文书
旅游个人求职信范文
2014/01/30 职场文书
三年级语文教学反思
2014/02/01 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
朋友聚会开场白
2015/06/01 职场文书
导游词之包公祠
2019/11/25 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android