自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 问答 (1)
  • 收藏
  • 关注

原创 TVM生成shader教程(1)

TVM 的Tensor expression language可以生成高效shader,不必再手写shader.看代码:from __future__ import absolute_import, print_functionimport tvmimport tvm.testingfrom tvm import teimport numpy as np# Global declarations of environment.tgt_host = "llvm"# Change it

2020-10-27 16:09:43 309

原创 Ubuntu virtualenv构建local Python环境

其实没有墙按照官方手册就能搞定,奈何有有墙,选项–no-download一定要开

2020-09-07 11:10:52 180

原创 上古激活函数之local response normalizatiion

最近因为工作原因,需要写lrn的gpu shader实现,公式如下:个人觉得lrn只适用于分类网络,且作用不大。其一,网络在初始训练时,权重都是随机值,产生的特征没有表征意义,对没有表征意义的特征进行抑制或者放大,不合理,除非把公式里的几个超参改进成可训练的,随着网络的训练施加影响。其二,对于非分类网络,例如图像生成,相邻通道值是不需要放大差距的,例如网络的最后进程,一般一个通道只表示一个或很少的特征,例如背景,值都是相近的...

2020-08-26 10:32:34 241

原创 深度学习之dropout计算细节

dropout得原理和作用就不必说了,dropout是以给定得概率随机选取输出值置0,但在置0后对与未置0的值,还会乘以1(1-dropout_rate),为什么要这样,拿最简单的例子来说,假如输出一个概率向量,要保持概率和始终为1....

2020-08-21 14:52:11 906 1

原创 tensorflow batch normalization use example

import sys, osos.environ["CUDA_VISIBLE_DEVICES"] = "0"import tensorflow as tfimport tensorflow.examples.tutorials.mnist.input_data as input_datamnist = input_data.read_data_sets("./MNIST_data/",one_hot=True)import numpy as npfrom PIL import Imageho

2020-08-13 11:48:26 106

原创 deep learning batch normalization实现之cudnn

代码不方便上传,只能传图片。kernel头文件:kernel cpp文件太大 传不了测试文件:

2020-08-12 16:42:30 329

原创 deep learning之batch normalization详解

建议直接看paper:paper地址batch normalization已经是一门很老的技术了,2015年就出了paper,相信大家都耳熟能详,已经是网络的必备结构,但其中的一些细节,恐怕容易疏忽。公式:x为bn层的输入数据,此公式的作用是把输入数据的分布的期望和方差变为0和1。bn的模式有两种,一种是通用模式:per activation,另一种只适合卷积:spatial。对于per activation:求期望,假设数据格式为NCHW,大小为data[10][10][10][10], 产

2020-08-12 16:28:02 156

原创 deep learning张量加法实现之cudnn

由于工作需要,需要用cudnn实现tensor add kernel.代码传不了,只能传图片头文件:cpp文件测试文件:

2020-08-06 17:40:48 171

原创 C++数据类型之half float

c++浮点类型只有float与double,最近工作需要用半精度浮点。首先我们得搞清楚float在内存的二进制表示,详情见:IEEE754浮点定义如下图:float的内存表示由:1位符号为、8位指数位、23位有效数字位组成组合公式为:8指数位的理论取值范围为:[-128,127]或者[0,255],但此处的取值范围却是为:[-126,127],00000000和00000001都表示-126,11111111表示nan(not a number)。我们递推一下:00000000:-126

2020-08-06 17:19:31 10605 2

原创 深度学习operation: matmul之NV shader实现

最近工作需要写shader,决定开个新坑,我写过的shader都会在后续文章公开。写shader还是有必要了解一下NV GPU的硬件建构,至少知道device代码运行时的物理地址映射,CPU程序运行时有堆和栈的概念,而NV GPU 运行时是不同的,例如CPU c++ 函数内局部变量放在栈里,但NV GPU c++函数局部变量放在相应的SP寄存器里,特别是要写出高性能shader,往往需要对针对特定硬件架构做优化。此实现利用了share memory做加速。下面是工程结构:build.shnvcc

2020-07-25 15:12:59 256

原创 cudnn之Partially-packed Tensors

cudnn 的 nd tensor的内存排列形式有 Fully-packed Tensors、Partially-packed Tensors、Spatially Packed Tensors、Overlapping Tensors这4种,本文讲Partially-packed Tensors。Partially-packed Tensors就是地址长度大于值的个数,举个例子,一个float32数组a[3][2][2],stride为[5,2,1],那么此数组在device上占用的内存应为sizeof(f

2020-07-14 14:07:01 262

原创 deep learning激活函数实现之cudnn

代码不方便上传,只能传图片。注意:cudnn对于输入的维度限制为4~8,少于4维的数据可以把多余的维度的shape设置为1,多余8维的数据则无能为力了。cudnn对于输入数据的size限制为最多20亿,也就是说输入数组的元素的个数最多为20亿。先看kernel头文件:kernel cpp文件:run:...

2020-07-07 17:34:18 261

原创 卷积实现之cudnn

由于工作原因,我需要用cudnn实现卷积。代码在内网,只好上传代码图片。工程主文件:工程辅助文件:辅助文件用于造test case,不是必须文件。cmake 文件:卷积核头文件:卷积核cpp文件:用卷积核构造卷积:...

2020-07-02 10:23:42 745

原创 cudnn不同卷积实现速度和空间比拼

卷积逻辑上只有一种理解,但硬件实现为了加速和节约空间有各种不同的实现。cudnn上有8种实现,我用的cudnn7,CUDNN_CONVOLUTION_FWD_ALGO_DIRECT在cudnn上没有实现。在输入为[1,200,200,3],卷积核为[3,3,3,3],stride为1,pad为1时,各个运算时间,gpu显存消耗,workspace size 为0.000003S233M0M0.0000026S233M0.228M0.0000036S233M4.119

2020-06-28 10:56:15 1187 4

原创 空洞卷积的感受视野计算

一个3x3卷积核,dialation为1时感受视野为3x3,当dialation为2时,感受视野为多少?网上大多数说的是7x7,就是在卷积核内部插0值,在外围也包了一圈0,本人用tensorflow和cudnn验证了一下,当input tensor 为[1,10,10,3],卷积核为3x3x3x3(o,i,h,w),stride为1,dialation为2,pad为1时,输出tensor为[1,8,8,3],可见感受视野为5x5,并非7x7,空洞卷积只是在卷积核内部插0值,并没有在卷积核外围填0值,况且在外

2020-06-23 11:26:24 599

原创 NVIDIA数值不稳定

调用cudnn库写卷积运算,同样的输入 、卷积核、操作,总能观测到输出的微小偏差。实验在RTX2080TI上进行输入:shape为:[1,3,10,10]卷积核:shape为[3,3,3,3]第一次输出为:第二次输出为:可以看到第一行第三列数据有微小差异。因为是并行运算,同样的代码,在硬件上的运行流程每次几乎都不一样,所以数值会有微小差异,对于深度学习大多数应用场景,这点差异可以忽略,但对于高精度计算的场景,特斯拉才能满足。...

2020-06-18 10:51:01 216

原创 Tensorflow源码解析之设备分配Placer

Placer为C++类,声明在头文件:tensorflow-r1.14\tensorflow\core\common_runtime\placer.h。看注释就知道此类的功能了。// A placement algorithm that assigns the nodes of the given Graph to// devices the given DeviceSet, respecting the following constraints://// 1. Existing device

2020-06-10 10:05:52 271

原创 tensorlfow数据类型之reference type

a=tf.Variable(1,name=“variable_a”)print(a.dtype)在python层面上述代码产生一个int32_ref的tensor,吃a的op必须和variable_a在同一设备上,并且tensor a 和variable_a共享同一块buffer(共享buffer肯定要在同一设备上)。上述代码产生的pb图如下:我们看看read的属性:注意_class属性,loc:@Variable表示此op的输出tensor和Variable这个op共享buffer,也必须在同

2020-06-09 18:23:24 285

原创 tensorlfow手动插入fake quant node之op的多个输入区间差别过大

如图:对于add这个op,左边的输入范围为[-50,50],且左边为网络中间特征tensor,右边为掩码,范围为[0,10000],则add以后的输出为【0,10050】,如果在add以后插入量化节点,则中间特征tensor的精度损失殆尽!...

2019-07-31 19:37:39 725 1

原创 tensorflow之tensorboard op name与本地graph name之坑

带括号的,在本地graph的名称实际上是"bert/encoder/layer_0/attention/self/Reshape"

2019-07-31 14:30:36 294

原创 tensorflow优化器对graph的操作

在训练时,opt会进行两步操作,第一步建立反向传播图,第二步执行,traininig graph和reference graph是不一样的,但权重是一样的

2019-07-05 12:01:54 238

原创 tensorflow restore .ckpt原理分析

在进行saver.restore(sess, ckpt_filename)前需要建立一个graph,而graph包括opration和tensor,placeholder,这种方式只是reload权重,网络结构不一样可也reload权重,只要权重名字一样就行...

2019-07-05 11:59:06 586

原创 深度学习卷积的本质

要搞懂卷积的本质,得从以下几个方面理解。卷积的数学意义:卷积为相乘再求和,其实质为积分运算的离散实现,卷积核为大小为积分区间。函数的表现形式:函数可以为表达式,例如:y=a*x+b,也可以为表格,深度学习中,卷积核为积分函数,输入为积分变量。对图像或者特征图进行卷积的意义:先说输入通道为1输出通道都为n的情况,就是拿n个函数(长宽为a,b的卷积核),对输入的两个维度(x轴和y轴)的每一点(...

2019-07-03 11:16:33 1640

原创 pytorch指定权重初始化方式

如果网络权重不初始化,pytorch有一套默认初始化机制,本人没有研究具体怎么初始化的,和tensorflow标准正态分布初始化效果一样,下面是指定初始化代码:conv = nn.Conv2d(*args, **kwargs)conv.weight.data.normal_() #w以标准正态分布初始化conv.bias.data.zero_() #偏置以0初始化...

2019-05-06 15:37:25 3392

原创 centerloss之中心点计算

以minist为例:中心点有2种计算方式:方式1:人算:批次取400,平均每批次每个数字有400/10=40个点,如果取40个点的中心为每批次训练的中心,数据太少,误差大, 所以先定义一个队列,队列长度为400*20,前20个周期不训练中心损失,只训练分类损失,把每批次网络计算的点(形状为【400,2】)装进队列,从第20个周期开始,计算队列里对应数字的中心,然后以此中心计算中心损失...

2019-04-11 16:15:28 1170

原创 python之glob模块

深度学习的数据集往往是一个文件下下面包含很多图片,用glob模块可以很方便的制作dataset,下面简单介绍:glob.glob()函数接受通配模式作为输入,并返回所有匹配的文件名的路径字符串列表,与os.listdir类似。文件夹路径为:‘data/samples’,里面放了很多图片看代码:import globa=glob.glob('%s/*.*' % r'data/sample...

2019-03-26 15:28:55 349

原创 numpy之where()

where()函数接收bool数组,返回满足条件的索引,不过要特别注意返回值的形式看代码:import numpy as npb=np.array([[[5,5],[2,2],[3,3],[5,5],[1,1]],[[5,5],[2,2],[3,3],[5,5],[1,1]]])print(b.shape)all =np.where(b > 3)dim1,dim2,dim3...

2019-03-01 16:50:25 386

原创 numpy切片与索引的区别与组合使用

数组索引能办到的,切片都能办到,只不过索引会降维,而切片不回改变维度,代码:纯切片:import numpy as npboxes = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,10]])a = boxes[:,2:3]print(boxes.shape)print(a)结果:(3, 4)[[ 3][ 7][11]]切片家索引:...

2019-02-26 19:19:14 1142 1

原创 PIL读取图片的形状及变形

代码:from PIL import Imageimg = Image.open(“图片路径”).convert(‘RGB’)此时图片的形状是hwc,一般来说,训练网络要的形状是whc,这里可以用numpy变形代码如下img=np.array(img)img=img.transpose((1,0,2)) #hwc–>whc...

2019-01-28 14:10:26 5466 1

原创 argmax函数轴取值

在深度学习中,argmax函数很常见,标签采用ont-hot,输出层用softmax激活可以加快网络训练速度和提升准确率,而在取值时,用argmax函数取值,涉及轴问题,数据在哪个轴,axis就填哪个轴,通常数据都在最后一个轴,下面举例说明。一维情形:代码:import tensorflow as tfimport numpy as npnp_arry = (np.random.nor...

2019-01-27 17:00:10 818

转载 batch normalization

Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性。虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个经验领先于理论分析的偏经验的一门学问。本文是对论文《Batch Normalization: Accelerating Deep Network Training by...

2019-01-22 16:27:58 97

转载 Python代码雨版本2

import randomimport pygamePANEL_width = 1600PANEL_highly = 800FONT_PX = 15pygame.init()# 创建一个可是窗口winSur = pygame.display.set_mode((PANEL_width, PANEL_highly))font = pygame.font.SysFont("1...

2019-01-21 12:44:55 4827

转载 python黑客帝国代码雨特效

效果:代码:try:import pygameimport sysfrom pygame.locals import *from random import randintexcept:print(“Load modules error!!”)exit()define some datasSCREEN_WIDTH = 1366SCREEN_HEIGHT = 768LOW...

2019-01-21 12:33:45 9256

原创 pytorch轴

代码:import torchclass_num = 10batch_size = 4label = torch.Tensor(2,3,4,5).random_() % class_numprint(label.size())label=label.permute(1,0,2,3)print(label.size())输出:torch.Size([2, 3, 4, 5])tor...

2019-01-20 19:21:13 216

原创 pytorch标签转onehot形式

代码:import torchclass_num = 10batch_size = 4label = torch.LongTensor(batch_size, 1).random_() % class_numprint(label.size())one_hot = torch.zeros(batch_size, class_num).scatter_(1, label, 1)prin...

2019-01-20 18:49:47 12579

原创 pytorch全连接模型实现离散点回归拟合

神经网络可作为一个函数,例如x为训练样本矩阵,f为神经网络,则f(x)会得到一个输出,输出表示啥取决于训练目的和训练过程。本文章讲解以拟合为设计目的的全连接神经网络模型,神经网络即可进行线性回归,也可进行非线性回归,并且是还是分段拟合,线性与非线性取决于激活函数!先来简单的一元二次函数:看代码:x = torch.unsqueeze(torch.linspace(-1,1,100),dim...

2019-01-20 16:18:06 2707

原创 pytorch之Tensor与Variable的区别

首先在变量的操作上:Tensor对象支持在原对象内存区域上修改数据,通过“+=”或者torch.add()方法而Variable不支持在原对象内存区域上修改数据Variable对象可求梯度,并且对Variable对象的操作,操作会被记录...

2019-01-19 21:45:01 6939

原创 pytorch之Variable对象之梯度推导

由简入繁看代码:import torchfrom torch.autograd import Variablea = Variable(torch.ones(4),requires_grad=True)b=a+2c=b.mean()print©c.backward()print(a.grad)输出:tensor(3., grad_fn=)tensor([0.2500, 0....

2019-01-19 21:31:27 590

原创 pytorch之Variable对象

Variable类封装了Tensor类,并且添加了一些方法Variable类也重载了算术运算符,±*/,但未重载“+=”和“=”运算符,且不支持在原对象内存区域做修改

2019-01-19 20:36:53 373

原创 pytorch的tensor与numpy数组共享值

网上的很多博客说tensor与numpy数组共享内存,这是错误的先给结论:tensor与numpy数组共享部分内存,说共享值更严谨,且有条件看代码:a = torch.ones(2,2)b = a.numpy()print(id(a))print(id(b))输出:30307869963363030755215040解析:在Cpython里面,a,b是C指针,torch.one...

2019-01-19 14:56:33 891 1

空空如也

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

TA关注的人

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