pytorch 共享参数的示例


Posted in Python onAugust 17, 2019

在很多神经网络中,往往会出现多个层共享一个权重的情况,pytorch可以快速地处理权重共享问题。

例子1:

class ConvNet(nn.Module):
  def __init__(self):
    super(ConvNet, self).__init__()
    self.conv_weight = nn.Parameter(torch.randn(3, 3, 5, 5))
 
  def forward(self, x):
    x = nn.functional.conv2d(x, self.conv_weight, bias=None, stride=1, padding=2, dilation=1, groups=1)
    x = nn.functional.conv2d(x, self.conv_weight.transpose(2, 3).contiguous(), bias=None, stride=1, padding=0, dilation=1,
                 groups=1)
    return x

上边这段程序定义了两个卷积层,这两个卷积层共享一个权重conv_weight,第一个卷积层的权重是conv_weight本身,第二个卷积层是conv_weight的转置。注意在gpu上运行时,transpose()后边必须加上.contiguous()使转置操作连续化,否则会报错。

例子2:

class LinearNet(nn.Module):
  def __init__(self):
    super(LinearNet, self).__init__()
    self.linear_weight = nn.Parameter(torch.randn(3, 3))
 
  def forward(self, x):
    x = nn.functional.linear(x, self.linear_weight)
    x = nn.functional.linear(x, self.linear_weight.t())
 
    return x

这个网络实现了一个双层感知器,权重同样是一个parameter的本身及其转置。

例子3:

class LinearNet2(nn.Module):
  def __init__(self):
    super(LinearNet2, self).__init__()
    self.w = nn.Parameter(torch.FloatTensor([[1.1,0,0], [0,1,0], [0,0,1]]))
 
  def forward(self, x):
    x = x.mm(self.w)
    x = x.mm(self.w.t())
    return x

这个方法直接用mm函数将x与w相乘,与上边的网络效果相同。

以上这篇pytorch 共享参数的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
举例讲解Python编程中对线程锁的使用
Jul 12 Python
python实现批量监控网站
Sep 09 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
Python中的pathlib.Path为什么不继承str详解
Jun 23 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
简单介绍一下pyinstaller打包以及安全性的实现
Jun 02 Python
python如何调用百度识图api
Sep 29 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 #Python
pytorch自定义初始化权重的方法
Aug 17 #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
You might like
php cc攻击代码与防范方法
2012/10/18 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
2013/04/01 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
使用ngView配合AngularJS应用实现动画效果的方法
2015/06/19 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
js限制文本框只能输入中文的方法
2015/08/11 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
Three.js快速入门教程
2016/09/09 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
使用vscode快速建立vue模板过程详解
2019/10/10 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
js实现微信聊天效果
2020/08/09 Javascript
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
python实现二维插值的三维显示
2018/12/17 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
Python包和模块的分发详细介绍
2020/06/19 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
linux面试题参考答案(6)
2016/06/23 面试题
利用promise及参数解构封装ajax请求的方法
2021/03/24 Javascript
家长会邀请书
2014/01/25 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
入党综合考察材料
2014/06/02 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
2015小学教师年度工作总结
2015/05/12 职场文书
患者身份识别制度
2015/08/06 职场文书
高中信息技术教学反思
2016/02/16 职场文书
《圆的面积》教学反思
2016/02/19 职场文书