自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (4)
  • 收藏
  • 关注

原创 petalinux移植linux到zynq

移植方式见链接需要注意的几点:1.petalinux对操作系统要求甚高,如下图2.petalinux在安装时和编译时,需使用普通用户,root用户会发生奇怪的错误。3.对文件和文件夹的权限也有要求。以上过程还可参见xilinx官方文档UG1144按照上边的链接编译完成后,将image.ub,u-boot.elf和zynq_fsbl.elf打包为BOOT.bin文件,并烧录至开发板的FLASH中,之后将开发板的启动方式改为从FLASH启动,上电后结果如图所示:登陆root用户,进行一些简单的

2020-11-22 22:26:36 20

原创 system verilog实现矩阵乘法

`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 2020/11/13 17:28:51// Design Name: // Module Name: mm// Project Name: // Target Devices: // Tool Ver

2020-11-15 18:30:00 68

原创 分块矩阵乘法+乒乓操作

加载分块矩阵A和B的代码如下:`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 2020/11/14 10:30:18// Design Name: // Module Name: load_two_block// Project Name: //

2020-11-14 13:03:56 73

原创 基于FPGA的矩阵乘法

最近在学system verilog,于是就打算用它写一下矩阵乘法,来体验一把system verilog相对于verilog的方便之处(sv中数组可以作为接口)以下是矩阵乘法的代码:`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date: 2020/11/13

2020-11-13 17:14:42 64 1

原创 int8量化中的KL散度(相对熵)

我们知道,P,Q两列数据的相对熵越小,那么P,Q分布越接近,用Q近似P损失的信息就少,英伟达的INT8量化就是基于这个原理,下面是量化过程相对熵的计算。(未完,打算复现这个int8量化)import mathimport numpy as npimport matplotlib.pyplot as pltdef create_bin(data,num): #将[data.min,data.max] num等分,统计每个子区间内的数据个数 data_max=max(data)

2020-11-08 12:58:32 148 1

原创 用神经网络进行多元非线性函数的拟合

import tensorflow as tfimport numpy as npimport matplotlib.pyplot as plttrain_feature=np.zeros((10000,2))train_label=np.zeros((10000,1))x=np.linspace(-np.pi,np.pi,100)y=np.linspace(-np.pi,np.pi,100)for i in range(100): for j in range(100):

2020-11-07 18:10:55 88

原创 谷歌TPU分析之脉动阵列

在之前的博客中,介绍了一种使用脉动阵列计算矩阵乘法的方法,在那篇博客中,脉动阵列的主要特点是:数据从左向右流动,而权重则从上向下流动。而在谷歌第一代的TPU中,其脉动阵列却并非是这种形式的。在谷歌的TPU中,权重是预先存储在Px∗PyP_x*P_yPx​∗Py​个PE上的,并且整个计算过程权重都保持不动,即weight stationary,而数据自左向右流动,同时,每个PE单元的部分和则自上而下流动,下面是一个具体的计算过程演示:...

2020-11-06 21:43:27 43

原创 python调用外部可执行文件的三种方法

首先用c语言编写一个简单的计算阶乘的程序,代码如下:#include<stdio.h>int main(int argc,char *argv[]){ //计算n的阶乘 int i=0,j; int sum=0; int base=0; int product=1; char* str=argv[1]; if(argc!=2) printf("argument is not right\n\r"); printf

2020-11-06 18:55:50 57

原创 Geopandas对地图文件按区域进行分割并统计

import numpy as npimport matplotlib.pyplot as pltfrom shapely.geometry import Polygonimport geopandas as gpdimport mathdef make_mesh(box,w,h): #按照w,h对box进行网格划分 [xmin,ymin,xmax,ymax]=box list_x=np.arange(xmin,xmax,w) list_y=np.arange(ymin,

2020-11-06 11:25:49 173

原创 python进行网格分割

import numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as mpathesfrom shapely.geometry import Polygondef make_mesh(box,w,h): #按照w,h对box进行网格划分 [xmin,ymin,xmax,ymax]=box list_x=np.arange(xmin,xmax,w) list_y=np.arange(ymin

2020-11-06 08:50:00 183

原创 python中配置文件的读取

首先在config.ini中写入如下内容[Mysql-Database]host=localhostuser=rootpassword=123456db=testcharset=utf8[Email]host=http://mail.qq.comaddress=234567@qq.compassword=123456然后编写python读取该配置文件import configparsercf = configparser.ConfigParser()cf.read("F:\

2020-11-05 17:43:39 73

原创 论文阅读-Fast Algorithms for Convolutional Neural Networks

TitleFast Algorithms for Convolutional Neural Networks未完待续…

2020-11-04 16:19:12 78

原创 PyQt5使用下拉形式的复选框

from PyQt5.QtWidgets import QComboBox, QListWidgetItem, QListWidget, QCheckBox, \ QApplication, QVBoxLayout, QWidget,QPushButton,QHBoxLayoutimport sysclass ComboCheckBox(QComboBox): def __init__(self,parent,items): super().__init__() self.pa

2020-11-03 19:07:53 87 1

原创 素数的测定

强伪素数的定义,如下:则容易知道,满足条件的n有可能是素数也有可能是合数(强伪素数),但是不满足条件的一定是合数。我们又有以下定理所以当返回为真时,它为合数错误的概率小于1/4,当返回为假时,必为合数,那么重复调用k次返回为真时,该数为合数的概率应该小于14k\dfrac{1}{4^k}4k1​,只要k取10,错误概率就小于百万分之一。整个代码如下:#include<iostream>#include<cstdlib>#include<ctime>#in

2020-11-02 20:45:18 51

原创 PyQT信号与槽

信号与槽机制是PyQT中的一大特色,信号用于发射信号,而与之绑定的槽函数在接受到信号之后便开始执行。先来看一个最简单的例子import sysfrom PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,QWidgetapp=QApplication(sys.argv)widget=QWidget()def showMsg(): QMessageBox.information(widget,'信息提示框','Ok 弹

2020-11-02 13:48:05 27

原创 矩阵乘法脉动阵列的C++模拟

自从谷歌的TPU问世以后,被人们遗忘很久的脉动阵列又再次火了一把。矩阵乘法就可以用脉动阵列进行计算,而脉动阵列这种数据流又特别适合用硬件进行实现。下面是用脉动阵列进行矩阵乘法的示意图。可以看到,A的每一行不是同时进入脉动阵列的,而B的每一列也不是同时进入脉动阵列的,相邻行或列进入脉动阵列的时间恰好相差一个时钟周期。以下是用c++模拟脉动阵列的代码:#include <iostream>#include <cstdlib>#include <ctime>

2020-10-30 20:57:13 75 1

原创 ShiDianNao的c++实现

#include"cfg.h"#include<iostream>#include<cstdlib>#include<ctime>using namespace std;class PE{public: int weight; int feature; int acc;public: void calc(){ acc+=weight*feature; return; }};class

2020-10-27 11:01:29 54

原创 ShiDianNao中数据存储方式的c++模拟

ShiDianNao中数据的存储方式具体见链接#include<iostream>#include<cstdlib>#include<ctime>using namespace std;class NBin{ public: int Py; int Px; int Bank_row; int ***Bank; //共需要2*Py个bank,每个bank都是一个二维矩阵,其中每

2020-10-23 15:44:25 46

原创 循环分块对减少off-chip memory access的具体分析

如图,我们要计算NaN_aNa​个t(i)t(i)t(i)和NbN_bNb​个r(j)r(j)r(j)两两之间的距离,这是未进行分块的原始代码,假设cache(或者片上缓存)的容量为M个向量,并假设NaN_aNa​和NbN_bNb​远大于MMM,则对每个i,我们从片外存储器load一个ttt,并且从片外存储器load M-1个rrr,进行M-1次的距离计算后,这M-1个r便被替换出cache,转而加载下一组M-1个的r,因此,对每个确定的i,需要进行约[NbM−1][\dfrac{N_b}{M-1}][M.

2020-10-22 21:22:10 38

原创 N皇后问题的拉斯维加斯算法和回溯算法

#include<iostream>#include<cstdlib>#include<ctime>#define N 8using namespace std;int T[100]; //(i,T[i])指放在第i行第T[i]�?int k=0; //当前已经放置了多少行bool place(int j);void backtrace(){ //当前已经放置完第1,2,3...k行,从第k+1行开始回�?

2020-10-22 15:50:40 78

转载 Graph Convolutional Network(GCN)

layers.pyimport mathimport torchfrom torch.nn.parameter import Parameterfrom torch.nn.modules.module import Moduleclass GraphConvolution(Module): def __init__(self, in_features, out_features, bias=True): super(GraphConvolution, self).__

2020-10-20 18:37:37 30

原创 EIE稀疏矩阵乘法硬件模拟

#include<iostream>#include<cstdlib>#include<ctime>#include <iomanip>using namespace std;typedef int dtype;typedef struct CSC{ int a; //存储非零元素个数 int n; //存储列数 dtype* v; //存储非零值

2020-10-19 16:17:38 39

原创 LSQ+的pytorch实现

import torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Functionclass Round(Function): @staticmethod def forward(self, input): output = torch.round(input) return output @staticmethod def backward

2020-10-17 21:48:23 41

原创 稀疏矩阵CSR存储的C++实现

实现了稀疏矩阵的生成(指定稀疏程度)、稀疏矩阵转换为CSR、从CSR中恢复出矩阵、稀疏矩阵和向量的乘法等功能。从运行结果来看,稀疏矩阵存储为CSR格式和向量相乘的运行速度快于普通矩阵向量乘法,而且稀疏程度越高,优势越明显。#include<iostream>#include<cstdlib>#include<ctime>#include<stdio.h>typedef int dtype;using namespace std;void csr_

2020-10-16 20:53:11 93

原创 LEARNED STEP SIZE QUANTIZATION论文复现

import torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Functionclass Round(Function): @staticmethod def forward(self, input): output = torch.round(input) return output @staticmethod def backward

2020-10-15 23:23:51 206 2

原创 论文阅读-LEARNED STEP SIZE QUANTIZATION

一.TitleLEARNED STEP SIZE QUANTIZATION二.Abstract&Introductionwhy?近年来,神经网络作为一种许多革命性技术的组成部分开始崭露头角,比如图像识别、语音识别以及自动驾驶等。但是,要利用好这一技术并大规模应用需要开发者有一个系统性的视角,即要兼顾网络的性能、吞吐率、能效以及紧凑程度。现在很多研究者都致力于在保持网络精度的同时,用低精度的数据去表示权重和激活,这种方法使得模型的大小以及计算量大大降低。因此,如何在降低精度的同时尽可能保持网络

2020-10-15 19:59:34 84 2

原创 BN融合的量化感知训练及其uint8推理的模拟

上一篇博客介绍了如何进行量化感知训练,并进行uint8前向推理,但是没有将BN层进行融合,这使得模型推理时的计算复杂度仍然有改进的空间,本篇博客讲述了如何进行BN融合的量化感知训练,并在训练完成后进行了uint8推理的模拟,以方便今后在FPGA上的部署。代码:from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport torchi

2020-10-15 10:21:07 80

原创 uint8量化感知训练mnist手写体识别

import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch import distributedfrom torch.nn import initfrom torch.nn.parameter import Parameterfrom torch.autograd import Function# ********************* range_trackers(范围统计器,统计量化前范围) *

2020-10-14 18:06:22 61 1

原创 BNN训练MNIST数据集

from __future__ import absolute_importfrom __future__ import divisionfrom __future__ import print_functionimport torch.nn as nnimport torchimport torch.nn.functional as Ffrom torch.autograd import Function# ********************* 二值(+-1) *********

2020-10-13 16:19:31 50

原创 论文阅读6:MeliusNet

一.TitleMeliusNet: Can Binary Neural Networks Achieve MobileNet-level Accuracy?二.Abstract&Introductionwhy?深度神经网络在众多机器学习领域取得了巨大的成功,人们也在不断设计更大、更复杂的网络以追求更高的准确率,然而,深度神经网络巨大的参数数目和计算量阻止了其在移动和嵌入式设备上的应用,针对这一问题,人们做了许多工作来减少模型大小、加速推理速度,主要可以分为三个研究方向:一是模型剪枝技术,二是

2020-10-12 15:35:19 70

原创 论文阅读笔记5-An Asynchronous Energy-Efficient CNN Accelerator with Reconfigurable Architecture

一、TitleAn Asynchronous Energy-Efficient CNN Acceleratorwith Reconfigurable Architecture二、Abstract & Introductionwhy?卷积神经网络在计算机视觉领域被广泛使用,并且展示了它在图像分类、目标检测以及视频监控等方面的巨大优势。传统上 ,卷积神经网络的推断过程在CPU和GPU上完成,但是,CPU计算资源有限,并行度不够,而GPU虽然在计算方面强于CPU,但是GPU有着极高的功耗,ASI

2020-10-10 21:30:26 42

原创 ShiDianNao中的数据组织

在ShiDianNao中,NBin和NBout有2∗Py个Bank,每个Bank分为许多行,每行Px∗2字节,即每行Px个16位定点数2*P_y个Bank,每个Bank分为许多行,每行P_x*2字节,即每行P_x个16位定点数2∗Py​个Bank,每个Bank分为许多行,每行Px​∗2字节,即每行Px​个16位定点数,下面讲讲具体的数据组织方式(困扰了我很久)如图11所示,首先,将Nyin∗Nxin的输入特征按照Py∗Px进行分块N_{yin}*N_{xin}的输入特征按照P_y*P_x进行分块Nyin.

2020-10-09 21:57:13 36

原创 论文阅读4:ShiDianNao

一、TitleShiDianNao: Shifting Vision Processing Closer to the Sensor二、Abstractwhy?尽管近年来神经网络在很多领域都表现出色,但是神经网络的能效和性能都受限于访存,这在计算机视觉领域主要是指CNN(卷积神经网络),因此,如果要进行CNN在边缘应用中的推广,这是一个必须解决的问题。how?本文中,作者利用卷积神经网络权重共享的特性,提出了一个叫做ShiDianNao的加速器,它充分进行了数据复用,消除了对DRAM的访问,并且

2020-10-09 13:59:49 77

原创 生成不重复的随机数

问题:生成[0,N-1]区间内的n个互不相同的随机数。解决思路:首先,生成一个长度为N的数组,然后将其打乱,取前n个数,即为上述问题的解。为了验证上述方法产生的随机数是符合要求的,我们用下面的方法来检验。每次随机的从[0,N-1]中选取n个数,记它们的和为X,则X的期望可以计算如下:这样选取n个数总共有CNnC_N^nCNn​中取法,这么多取法总共取出了CNn∗nC_N^n*nCNn​∗n个数,而0,1,2,…N-1这N个数出现的概率是相同的,因此每个数出现了n∗CNnN\dfrac{n*C_N^n

2020-10-07 21:38:02 31

原创 有序表搜索

#include<iostream>#include<algorithm>#include<ctime>#include<cstdlib>#include<set>#pragma GCC optimize("Ofast")using namespace std;int rand_int(int a,int b);void non_repeat(int n,int *a){ set<int> s; wh

2020-10-07 19:58:04 43

原创 Latex插入代码以及图片

\documentclass{article}\usepackage{ctex} %是个中文库\usepackage{graphicx}\usepackage{float}\usepackage{listings}\begin{document}\noindentp23-EX3 \\已知$a\le x\le b,c\le f(x)\le d$,求$\int_a^b f(x)\,dx$\begin{figure}[H] \centering %使图片居中显示 \inclu

2020-10-07 15:29:29 84

转载 windows和ubuntu双系统卸载ubuntu的安全方法

若启动方式为legacy引导,则使用Mbrfix。若启动方式为UEFI,则使用easyUEFI。链接

2020-10-06 16:53:49 23

原创 python中的NotImplementedError

class A(): def __init__(self): self.name='Tom' def func(self): raise NotImplementedError def get_sex(self): if self.sex=='man': print("男") else: print("女")class B(A): def __init__(self)

2020-10-04 19:37:08 85

原创 CONV BN融合实验

以下代码是对conv+bn的融合,这里,均值、方差都是对batchsize,height,width这三个维度求的,因此mean,var,γ,β都是一个N维向量,其中N为卷积层输出特征的通道数mean,var,\gamma,\beta都是一个N维向量,其中N为卷积层输出特征的通道数mean,var,γ,β都是一个N维向量,其中N为卷积层输出特征的通道数import numpy as npimport torchimport torch.nn as nnimport torch.nn.function

2020-09-29 21:53:47 61

原创 pytorch学习记录

一model.train()和model.eval()的差别:model.train()会启动BatchNormalization和DropOut操作,而后者则不会启用。训练完train样本后,生成的模型model要用来测试样本。在model(test)之前,需要加上model.eval(),否则的话,有输入数据,即使不训练,它也会改变权值。这是model中含有batch normalization层所带来的的性质。使用PyTorch进行训练和测试时一定注意要把实例化的model指定train/ev

2020-09-29 15:13:51 47 2

pingpang_block_mm.rar|pingpang_block_mm.rar

基于system verilog的矩阵乘法代码 ,进行了分块计算,并且对块矩阵的载入和写回进行了乒乓操作,大大掩盖了数据传输时间,且代码中的乒乓操作写法具有通用性,可供借鉴。

2020-11-18

动态分支预测MIPS.rar|动态分支预测MIPS.rar

用verilog实现的五级流水线CPU,通过旁路技术解决了数据冒险,通过BTB动态分支预测来解决控制冒险

2020-09-13

tt.py,一个轻量级卷积神经网络,基于numpy

本程序基于numpy,自己动手实现了一个简单的卷积神经网络,共两个卷积层,两个池化层以及两个全连接层,并达到了97%的准确率

2020-03-17

i2c_eeprom.rar

在fpga平台上用verilog通过iic总线实现对eeprom的读写

2019-11-10

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除