在常见的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类型,在计算过程中会被更新,将会被保存到模型中。

————————————————
版权声明:本文为CSDN博主「goodxin_ie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/goodxin_ie/article/details/84555805

pytorch自定义初始化权重相关推荐

  1. python权重初始值设置_pytorch自定义初始化权重的方法

    在常见的pytorch代码中,我们见到的初始化方式都是调用init类对每层所有参数进行初始化.但是,有时我们有些特殊需求,比如用某一层的权重取优化其它层,或者手动指定某些权重的初始值. 核心思想就是构 ...

  2. Pytorch自定义Dataset和DataLoader去除不存在和空的数据

    Pytorch自定义Dataset和DataLoader去除不存在和空的数据 [源码GitHub地址]:https://github.com/PanJinquan/pytorch-learning-t ...

  3. java如何给一个链表定义和传值_如何在CUDA中为Transformer编写一个PyTorch自定义层...

    如今,深度学习模型处于持续的演进中,它们正变得庞大而复杂.研究者们通常通过组合现有的 TensorFlow 或 PyTorch 操作符来发现新的架构.然而,有时候,我们可能需要通过自定义的操作符来实现 ...

  4. Pytorch自定义数据集

    简述 Pytorch自定义数据集方法,应该是用pytorch做算法的最基本的东西. 往往网络上给的demo都是基于torch自带的MNIST的相关类.所以,为了解决使用其他的数据集,在查阅了torch ...

  5. boost::test模块带有自定义初始化测试的静态库使用变体

    boost::test模块带有自定义初始化测试的静态库使用变体 实现功能 C++实现代码 实现功能 boost::test模块带有自定义初始化测试的静态库使用变体 C++实现代码 #include & ...

  6. boost::test模块具有自定义初始化测试的共享库使用变体

    boost::test模块具有自定义初始化测试的共享库使用变体 实现功能 C++实现代码 实现功能 boost::test模块具有自定义初始化测试的共享库使用变体 C++实现代码 #include & ...

  7. keras模型中的默认初始化权重

    权重的初始化,决定了模型训练的起点.一个良好的初始化可以加快训练过程,同时避免模型收敛至局部最小值.为了在训练过程中避免使得权重的变化总沿着同一个方向,我们尽量避免将所有权重都初始化为同一个值,如全0 ...

  8. pytorch默认初始化_PyTorch的初始化

    背景 在使用PyTorch深度学习框架的时候,不管是训练还是测试,代码中引入PyTorch的第一句总是: import torch 在Gemfield前述专栏文章里,我们已经得知,torch/csrc ...

  9. 使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作

    使用pytorch自定义DataSet,以加载图像数据集为例,实现一些骚操作 总共分为四步 构造一个my_dataset类,继承自torch.utils.data.Dataset 重写__getite ...

  10. python中使用函数的优点_在python中使用自定义初始化函数而不是`__init__`的好处...

    野外的一些API(例如setuptools内部)有类似的东西,他们使用它们的优势. __init__调用可以用于低级内部API,而公共构造函数被定义为类方法,用于构造对象的不同方式.例如,在 pkg_ ...

最新文章

  1. mongo java mapreduce_MongoDB中MapReduce介绍与使用
  2. 计算机设备布局图,针对不同设备类型创建仪表板布局
  3. 从jquery源码中学习一些技巧
  4. 从零开始入门 K8s | Kubernetes 网络模型进阶
  5. 20165212 预备作业3 Linux安装及学习
  6. 多态和类属性、类方法
  7. 优化浏览器默认scroll样式小技巧
  8. 开环直流电机的机械特性_无刷直流电动机的开环调速机械特性研究
  9. 2018 区块链技术及应用峰会(BTA)·中国全日程公布!
  10. 博客文章加线框/表格
  11. 图像处理小tip——中值滤波的多种实现(包括快速中值滤波算法)
  12. iOS应用商店审核指南
  13. nodejs生成pdf文件
  14. 软路由安装openwrt系统
  15. 有意思的开源项目分享(持续更新,勤劳的搬运工,只放一些我感兴趣的)
  16. java default locale_Java Locale setDefault()用法及代码示例
  17. 论学校农业EI会议论文工程建设的使命与视野
  18. 干货 | 区块链的技术世界观
  19. ZOJ 3987 Numbers 2017CCPC秦皇岛站G题 大整数 二进制 贪心
  20. 第三方代付入帐是什么意思

热门文章

  1. 设计自己的ImageLoader图片加载框架
  2. ios mk上传文件到服务器,ios – 使用预签名URL将文件上传到AWS S3的代码有什么问题?...
  3. 狂神说Redis笔记三
  4. Kubernetes持久化方案(PV、PVC、StorageClass)
  5. 使用SQL语句操作数据库-01
  6. CTO:不要在 Java 代码中写 set/get 方法了,逮一次罚款
  7. VLC框架总结(二)VLC源码及各modules功能介绍
  8. 历时半载,我的新课上线了
  9. vue 图片服务器不显示,vue 打包放服务器,css样式不显示-Go语言中文社区
  10. python session模块_python requests模块session的使用建议及整个会话中的所有cookie的方法...