pytorch自定义二值化网络层方式


Posted in Python onJanuary 07, 2020

任务要求:

自定义一个层主要是定义该层的实现函数,只需要重载Function的forward和backward函数即可,如下:

import torch
from torch.autograd import Function
from torch.autograd import Variable

定义二值化函数

class BinarizedF(Function):
  def forward(self, input):
    self.save_for_backward(input)
    a = torch.ones_like(input)
    b = -torch.ones_like(input)
    output = torch.where(input>=0,a,b)
    return output
  def backward(self, output_grad):
    input, = self.saved_tensors
    input_abs = torch.abs(input)
    ones = torch.ones_like(input)
    zeros = torch.zeros_like(input)
    input_grad = torch.where(input_abs<=1,ones, zeros)
    return input_grad

定义一个module

class BinarizedModule(nn.Module):
  def __init__(self):
    super(BinarizedModule, self).__init__()
    self.BF = BinarizedF()
  def forward(self,input):
    print(input.shape)
    output =self.BF(input)
    return output

进行测试

a = Variable(torch.randn(4,480,640), requires_grad=True)
output = BinarizedModule()(a)
output.backward(torch.ones(a.size()))
print(a)
print(a.grad)

其中, 二值化函数部分也可以按照方式写,但是速度慢了0.05s

class BinarizedF(Function):
  def forward(self, input):
    self.save_for_backward(input)
    output = torch.ones_like(input)
    output[input<0] = -1
    return output
  def backward(self, output_grad):
    input, = self.saved_tensors
    input_grad = output_grad.clone()
    input_abs = torch.abs(input)
    input_grad[input_abs>1] = 0
    return input_grad

以上这篇pytorch自定义二值化网络层方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 算法 排序实现快速排序
Jun 05 Python
python字典序问题实例
Sep 26 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
Python中实现switch功能实例解析
Jan 11 Python
django 单表操作实例详解
Jul 30 Python
python实现while循环打印星星的四种形状
Nov 23 Python
django 外键创建注意事项说明
May 20 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 Python
讲解Python实例练习逆序输出字符串
May 06 Python
Pytorch: 自定义网络层实例
Jan 07 #Python
Python StringIO如何在内存中读写str
Jan 07 #Python
Python内置数据类型list各方法的性能测试过程解析
Jan 07 #Python
python模拟实现斗地主发牌
Jan 07 #Python
python全局变量引用与修改过程解析
Jan 07 #Python
python__new__内置静态方法使用解析
Jan 07 #Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 #Python
You might like
供参考的 php 学习提高路线分享
2011/10/23 PHP
php微信开发接入
2016/08/27 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
详解json在php中的应用
2018/09/30 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
一种angular的方法级的缓存注解(装饰器)
2018/03/13 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
小程序接口的promise化的实现方法
2019/12/11 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
python小技巧之批量抓取美女图片
2014/06/06 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
python写一个md5解密器示例
2018/02/23 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
基于python3的socket聊天编程
2020/02/17 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
python利用线程实现多任务
2020/09/18 Python
白酒市场开发计划书
2014/01/09 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
植物生产学专业求职信
2014/08/08 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
2014年村计划生育工作总结
2014/11/14 职场文书
2014年招生工作总结
2014/11/26 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题