Pytorch 实现自定义参数层的例子


Posted in Python onAugust 17, 2019

注意,一般官方接口都带有可导功能,如果你实现的层不具有可导功能,就需要自己实现梯度的反向传递。

官方Linear层:

class Linear(Module):
  def __init__(self, in_features, out_features, bias=True):
    super(Linear, self).__init__()
    self.in_features = in_features
    self.out_features = out_features
    self.weight = Parameter(torch.Tensor(out_features, in_features))
    if bias:
      self.bias = Parameter(torch.Tensor(out_features))
    else:
      self.register_parameter('bias', None)
    self.reset_parameters()

  def reset_parameters(self):
    stdv = 1. / math.sqrt(self.weight.size(1))
    self.weight.data.uniform_(-stdv, stdv)
    if self.bias is not None:
      self.bias.data.uniform_(-stdv, stdv)

  def forward(self, input):
    return F.linear(input, self.weight, self.bias)

  def extra_repr(self):
    return 'in_features={}, out_features={}, bias={}'.format(
      self.in_features, self.out_features, self.bias is not None
    )

实现view层

class Reshape(nn.Module):
  def __init__(self, *args):
    super(Reshape, self).__init__()
    self.shape = args

  def forward(self, x):
    return x.view((x.size(0),)+self.shape)

实现LinearWise层

class LinearWise(nn.Module):
  def __init__(self, in_features, bias=True):
    super(LinearWise, self).__init__()
    self.in_features = in_features

    self.weight = nn.Parameter(torch.Tensor(self.in_features))
    if bias:
      self.bias = nn.Parameter(torch.Tensor(self.in_features))
    else:
      self.register_parameter('bias', None)
    self.reset_parameters()

  def reset_parameters(self):
    stdv = 1. / math.sqrt(self.weight.size(0))
    self.weight.data.uniform_(-stdv, stdv)
    if self.bias is not None:
      self.bias.data.uniform_(-stdv, stdv)

  def forward(self, input):
    x = input * self.weight
    if self.bias is not None:
      x = x + self.bias
    return x

以上这篇Pytorch 实现自定义参数层的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用in操作符时元组和数组的区别分析
May 19 Python
Python 爬虫爬取指定博客的所有文章
Feb 17 Python
简单谈谈Python流程控制语句
Dec 04 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
Centos部署django服务nginx+uwsgi的方法
Jan 02 Python
django-rest-swagger的优化使用方法
Aug 29 Python
python 函数的缺省参数使用注意事项分析
Sep 17 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
python和php学习哪个更有发展
Jun 17 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
Python中PyQt5/PySide2的按钮控件使用实例
Aug 17 #Python
画pytorch模型图,以及参数计算的方法
Aug 17 #Python
pytorch 共享参数的示例
Aug 17 #Python
Pytorch卷积层手动初始化权值的实例
Aug 17 #Python
pytorch自定义初始化权重的方法
Aug 17 #Python
在Pytorch中使用样本权重(sample_weight)的正确方法
Aug 17 #Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 #Python
You might like
PHP入门速成(2)
2006/10/09 PHP
新版PHP将向Java靠拢
2006/10/09 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
node.js解决获取图片真实文件类型的问题
2014/12/20 Javascript
js数组的操作指南
2014/12/28 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
jQuery实现产品对比功能附源码下载
2016/08/09 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
2017/02/18 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
python Django模板的使用方法
2016/01/14 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
Python中一般处理中文的几种方法
2019/03/06 Python
3行Python代码实现图像照片抠图和换底色的方法
2019/10/10 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
美国网上订购鲜花:FTD
2016/09/23 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
财务会计毕业生个人求职信
2014/02/03 职场文书
个人近期表现材料
2014/02/11 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
公司离职证明范本
2014/10/17 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
西安兵马俑导游词
2015/02/02 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
小程序实现侧滑删除功能
2022/06/25 Javascript