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 相关文章推荐
wxPython中文教程入门实例
Jun 09 Python
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
详解Python中open()函数指定文件打开方式的用法
Jun 04 Python
Python2中文处理纪要的实现方法
Mar 10 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
详解Django+uwsgi+Nginx上线最佳实战
Mar 14 Python
Python多线程多进程实例对比解析
Mar 12 Python
python对一个数向上取整的实例方法
Jun 18 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
Python with语句用法原理详解
Jul 03 Python
Python常用模块函数代码汇总解析
Aug 31 Python
Alpine安装Python3依赖出现的问题及解决方法
Dec 25 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学习之简单计算器实现代码
2011/06/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(八)
2014/06/23 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
ThinkPHP 3.2 版本升级了哪些内容
2015/03/05 PHP
php批量删除操作(数据访问)
2017/05/23 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
javascript工具库代码
2012/03/29 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
JavaScript实现的select点菜功能示例
2017/01/16 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
2020/11/03 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
Python对文件操作知识汇总
2016/05/15 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python reduce()函数的用法小结
2017/11/15 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
python中比较两个列表的实例方法
2019/07/04 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
删除pycharm鼠标右键快捷键打开项目的操作
2021/01/16 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
超级搞笑检讨书
2014/01/15 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
项目申请汇报材料
2014/08/16 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
刑事代理授权委托书
2014/09/17 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书
军训新闻稿范文
2015/07/17 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript