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自动重试HTTP连接装饰器
Apr 28 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python学生成绩管理系统简洁版
Apr 05 Python
用Python shell简化开发
Aug 08 Python
使用Python实现租车计费系统的两种方法
Sep 29 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
浅谈django的render函数的参数问题
Oct 16 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
基于Python采集爬取微信公众号历史数据
Nov 27 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
关于的python五子棋的算法
May 02 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
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
写js时遇到的一些小问题
2010/12/06 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
2013/11/08 Javascript
jquery解析JSON数据示例代码
2014/03/17 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
js中开关变量使用实例
2017/02/24 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
在MAC上搭建python数据分析开发环境
2016/01/26 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
什么是GWT的Entry Point
2013/08/16 面试题
成人大专自我鉴定范文
2013/10/19 职场文书
教师演讲稿范文
2014/01/08 职场文书
小学数学教学反思
2014/02/02 职场文书
担保书格式及范文
2014/04/01 职场文书
单位委托书范本
2014/04/04 职场文书
自主招生教师推荐信
2014/05/10 职场文书
自主招生自荐信范文
2015/03/04 职场文书
民事调解书范文
2015/05/20 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang
浅谈Redis跟MySQL的双写问题解决方案
2022/02/24 Redis
Win11快速关闭所有广告推荐
2022/04/19 数码科技