我自己在研究BNN,苦于找不到代码(没有一个人写一个吗???)
自己写了一个,也不知道是不是标准的BNN,反正就是把所有参数都二值化了,用的MNIST,效果一般。如果只二值权值的话就需要分别对每一层进行二值,这个代码量挺大的而且没有意义。

from torchvision import datasets, transforms
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np
import torch.optim as optimclass Net(nn.Module):           #class 子类(父类)def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 20, 5, 1)self.conv2 = nn.Conv2d(20, 50, 5, 1)self.fc1 = nn.Linear(4 * 4 * 50, 500)self.fc2 = nn.Linear(500, 10)def forward(self, x):x = F.hardtanh(self.conv1(x))x = F.max_pool2d(x, kernel_size = 2, stride = 2)x = F.hardtanh(self.conv2(x))x = F.max_pool2d(x, 2, 2)x = x.view(-1, 4 * 4 * 50)x = F.hardtanh(self.fc1(x))x = self.fc2(x)# return xreturn F.log_softmax(x, dim=1)def paraMod(wb, model):start = 0for i,(name, para) in enumerate(model.named_parameters()):size = np.prod(para.shape)end = start+sizepara.data = wb[start:end].reshape(para.shape).cuda()  #把参数传进model里,para是浅拷贝start = enddef train(model, data, target, optimizer, p1, epoch):model.train()optimizer.zero_grad()output = model(data)loss = F.nll_loss(output, target)loss.backward()paraMod(p1, model)optimizer.step()print('epoch {} Train Loss: {:.6f}'.format(epoch, loss.item()))p2 = getParameter(model)return p2def getParameter(model):p1 = []for i, (name,para) in enumerate(model.named_parameters()):p1.extend(para.cpu().data.numpy().reshape(-1,))return torch.tensor(p1)if __name__ == '__main__':batch_size = 64test_batch_size = 1000device = torch.device("cuda")kwargs = {'num_workers': 0, 'pin_memory': True}train_loader = torch.utils.data.DataLoader(datasets.MNIST('./Dataset', train=True, download=True,transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))])),batch_size=batch_size, shuffle=True, **kwargs)# test_loader = torch.utils.data.DataLoader(#     datasets.MNIST('./Dataset', train=False, download=True,#                    transform=transforms.Compose([#                        transforms.ToTensor(),#                        transforms.Normalize((0.1307,), (0.3081,))#                    ])),#     batch_size=test_batch_size, shuffle=True, **kwargs)for index, (data, target) in enumerate(train_loader):    #只提取第一组数据64张图片保证后续对比data, target = data.to(device), target.to(device)data = torch.sign(data) # 将输入二值化break   #可以去掉这个,然后改成对每一batch数据进行训练model = Net().to(device)p1 = getParameter(model)        #实值参数L = len(p1)wb = torch.sign(p1)             #二值参数optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.1)for epoch in range(1, 101):paraMod(wb,model)p1 = train(model, data, target, optimizer, p1, epoch)wb = torch.sign(p1)

Binarized Neural Network : BNN二值神经网络代码实例相关推荐

  1. 二值神经网络(Binary Neural Networks)最新综述

    作者|秦浩桐.龚睿昊.张祥国 单位|北京航空航天大学 研究方向|网络量化压缩 本文介绍了来自北京航空航天大学刘祥龙副教授研究团队的最新综述文章 Binary Neural Networks: A Su ...

  2. 神经网络损失函数特别大_二值神经网络(Binary Neural Networks)最新综述

    作者|秦浩桐.龚睿昊.张祥国 单位|北京航空航天大学 研究方向|网络量化压缩 本文介绍了来自北京航空航天大学刘祥龙副教授研究团队的最新综述文章 Binary Neural Networks: A Su ...

  3. 【2020年BNN网络的SOTA—— ReActNet 】以简单的操作得到更高精度的二值神经网络

    作者| Cocoon 编辑| 3D视觉开发者社区 导语: 本文是由香港科技大学发布于ECCV 2020的论文,是Bi-Real Net作者对二值化研究领域的最新成果,拥有着69.4%的精度,作者通过简 ...

  4. 不使用先验知识与复杂训练策略,从头训练二值神经网络!

    选自 arxiv 作者:Joseph Bethge.Marvin Bornstein.Adrian Loy.Haojin Yang.Christoph Meinel 机器之心编译 参与:张玺.路 来自 ...

  5. 第一次胜过MobileNet的二值神经网络,-1与+1的三年艰苦跋涉

    作者:思 近日,苹果以 2 亿美元左右价格收购初创公司 Xnor.ai 的消息引起了社区极大的关注.作为一家以二值神经网络 Xnor-net 起家的人工智能初创公司,Xnor.ai 被苹果高价收购,也 ...

  6. 二值神经网络重大突破,第一次胜过MobileNet!-1与+1的三年艰苦跋涉

    点击我爱计算机视觉标星,更快获取CVML新技术 近日,苹果以 2 亿美元左右价格收购初创公司 Xnor.ai 的消息引起了社区极大的关注.作为一家以二值神经网络 Xnor-net 起家的人工智能初创公 ...

  7. 信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020

    出品 | AI科技大本营(ID:rgznai100) 导语:在CVPR 2020上,商汤研究院链接与编译组和北京航空航天大学刘祥龙老师团队提出了一种旨在优化前后向传播中信息流的实用.高效的网络二值化新 ...

  8. NeurIPS 2021 | 华为诺亚Oral论文:基于频域的二值神经网络训练方法

    ©作者 | 机器之心编辑部 来源 | 机器之心 常规符号函数的梯度几乎处处为零,不能用于反向传播.为此,来自华为诺亚方舟实验室等机构的研究者提出一种在频域中估计原始符号函数梯度的新方法. 二值神经网络 ...

  9. FPGA实现二值神经网络

    写在前面:之前的科研工在是使用RETL实卷机神经网络,其中数据是量化后的8Bit.也就是说还要使用乘法器,但是FPGA的DSP资源很有限.所以有了现在的工作,在FPGA上实现二值神经网络.主要从二值神 ...

  10. 二值神经网络(Binary Neural Network,BNN)

    在我刚刚过去的研究生毕设中,我在ImageNet数据集上验证了图像特征二值化后仍然具有很强的表达能力,可以在检索中达到较好的效果.而Bengio大神的这篇文章,则不止于将特征二值化,而是要将权重和每层 ...

最新文章

  1. 代码生成codegen
  2. 理解和解决Java并发修改异常ConcurrentModificationException(转载)
  3. 冒泡排序讲的明白 也有代码的
  4. CSS学习摘要-数值和单位及颜色
  5. javascript保留两位
  6. Oracle学习笔记(三)----------执行计划
  7. spring的基本用法
  8. android ListView常用知识总结
  9. pandas 非聚合函数
  10. DelphiXE4发布了
  11. [转]MySQL忘记密码的正确解决方法
  12. pgAdmin III简介
  13. 北京大学计算机辅助翻译招生计划,北京大学计算机辅助翻译硕士复习规划
  14. 报错---qt.qpa.plugin
  15. tableau public使用形状文件进行数据可视化
  16. [NLP自然语言处理]谷歌BERT模型深度解析
  17. YY工作总结—为人处事
  18. 大唐西域记 唐朝时代的世界划分 Re: [转载]悟空的仕途生涯(长)
  19. 第三代酷睿i3处理器_英特尔最新10代处理器发布:游戏世界最快
  20. 圣诞节海报做了吗?为你准备了圣诞素材

热门文章

  1. 动态规划之流水作业调度问题
  2. MySQL入门系列:MySQL数据类型
  3. python 表情包爬虫
  4. keil编写正弦函数_Keil C51编程控制倍频正弦信号的产生
  5. PHP:firebase/php-jwt生成jwt和验证
  6. 北斗终端与计算机传输信息,基于北斗信息的手机终端的应用研究
  7. ElasticSearch 学习(二)—— IK 分词器和 Kibana
  8. 台式计算机识别不了鼠标,USB无线鼠标失灵电脑检测不到无法识别怎么办
  9. PostgreSQL 13 新特性之 FETCH FIRST WITH TIES
  10. VLC接收RTP的H264流串流成OGGT向HTTP发送,可以直接用HTML5播放