
深度学习
本系列文章主要讲解深度学习相关算法
hjimce
追求实现文献算法的快感,追求学会一个新算法的充实感
展开
-
深度学习(七十)darknet 实现编写mobilenet源码
)parse.c文件中函数string_to_layer_type,添加网络层类型解析:if (strcmp(type, "[depthwise_convolutional]") == 0) return DEPTHWISE_CONVOLUTIONAL;(2)darknet.h文件中枚举类型LAYER_TYPE,添加网络层枚举类型:DEPTHWISE_CONVOLUTIONAL;(3)parse.c文件中函数parse_network_cfg添加网络层解析后进行构建: LAYER_T原创 2017-07-27 10:39:53 · 12612 阅读 · 23 评论 -
深度学习(六十九)darknet 实现实验 Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffma
原始模型大小64M:mAP=0.224 训练500次,模型大小54M:mAP=0.203训练5000次,模型大小49M:mAP=0.214训练50000次,模型大小39M:mAP=0.221训练100000次,模型大小30M:mAP=0.231原创 2017-07-04 14:07:03 · 6471 阅读 · 18 评论 -
深度学习(六十八)darknet使用
这几天因为要对yolo进行重新训练,需要用到imagenet pretrain,由于网络是自己设计的网络,所以需要先在darknet上训练imagenet,由于网上都没有相关的说明教程,特别是图片路径是怎么和类别标签对应起来的,让我百思不得其解,所以最后就自己去查看了darknet的源码,发现原来作者是用了字符串匹配,来查找图片路径字符串中是否有与类别标签字符串匹配的子字符串,以此判断该类别标签的原创 2017-07-05 16:42:47 · 32811 阅读 · 6 评论 -
深度学习(六十七)metal forge深度学习库使用
1、设置输入:let input = Input()或者let input = Input(width: 100, height: 100, channels: 3)2、创建网络:let output = input --> Resize(width: 28, height: 28) --> Convolution(kernel: (5, 5), channel原创 2017-06-19 17:41:45 · 1940 阅读 · 0 评论 -
深度学习(六十六)生成模型、最大化似然、KL散度
成模型中,假设样本数据是来自于未知的数据分布Pr中采样得到,生成模型的学习过程就是要学习一个Pr的近似概率分布Pθ,其中θ是模型的参数。对于Pθ有两种建模方式:(1)直接用参数θ来描述密度函数。也就是概率密度函数满足:(2)通过已知分布的随机变量Z,用参数θ的变换函数gθ(z)来描述概率密度函数:原创 2017-06-27 09:45:55 · 4450 阅读 · 0 评论 -
深度学习(六十五)移动端网络MobileNets
1、L2 decay权重对精度的影响:根据文献介绍,在引入可分离卷积层的时候,建议不用用L2权重,对降低精度,于是做了如下实验:第二行是采用L2 weight decay为0.00005的权重,明显最高精度下降了接近2%2、速度对比:原创 2017-06-01 15:04:24 · 4537 阅读 · 0 评论 -
深度学习(六十四)Faster R-CNN物体检测
在经典的RCNN中,物体检测的效果取得了State-of-the-art的效果,但是由于计算速度比较慢,后来在SPPNET、Fast R-CNN中,用卷积神经网络一次性提取一整张图片的特征图,然后在根据selective search在原始图片得到的搜索框,映射特征图上bbox,裁剪出feature map的bbox,然后在进行sotfmax物体分类。从而避免了RCNN中,需要2000次的CNN前向计算。在之前的RCNN、Fast-RCNN等算法中,都需要经过Region proposal相关算法进行原始原创 2017-06-17 19:53:21 · 10519 阅读 · 3 评论 -
深度学习(六十三)空间变换网络
卷积神经网络每一层都有其强大的功能,然而它对于输入数据的空间不变性却还有很大的缺陷,可能max pooling层,具有平移不变性,然而因为max pooling是一个局部操作,在CNN中对于大尺度的空间变换并不具备不变性。于是paper提出原创 2017-06-07 22:42:08 · 6001 阅读 · 0 评论 -
深度学习(六十二)SqueezeNet网络设计思想笔记
1、尽量用1*1的卷积核替代3*3的卷积核尽可能选择1*1的卷积核为主,因为1*1的卷积核比3*3的卷积核参数少了9倍。2、引入Squeeze layer,尽量减少每一层的输入特征图数量比如对于3*3的卷积层,参数的个数是:(number of input channels) * (numbe原创 2017-05-30 11:09:30 · 3307 阅读 · 3 评论 -
深度学习(六十一)NNPACK 移植与实验
1、克隆下载NNPACK2、克隆下载pthreadpool,把其中的include、src文件,共三个文件分别复制到NNPACK,合并include、src文件3、下载fixdiv,把头文件复制到nnpack文件include中https://github.com/Maratyszcza/FXdiv原创 2017-03-25 18:19:19 · 5015 阅读 · 1 评论 -
深度学习(六十)网络压缩简单总结
增加L2权重增加L2权重可以让更多的权重,靠近0,这样每次修剪的比例大大增加。四、从结构上,简化网络计算,这些需自己阅读比较多相关文献,才能设计原创 2016-06-02 10:56:45 · 4713 阅读 · 4 评论 -
深度学习(五十九)mxnet移植至android
一、android移1、$NDK/build/tools/make_standalone_toolchain.py \ --arch arm --api 21 --install-dir /tmp/my-android-toolchain2、git clone https://github.com/xianyi/OpenBLAS.gitcd OpenBLASmake TARGET=AR原创 2017-04-20 19:02:00 · 6664 阅读 · 3 评论 -
深度学习(五十八)caffe移植至mxnet
1、模型转换2、外部引用set(USE_CUDA OFF)set(USE_CUDNN OFF)add_subdirectory("./3dparty/mxnet/")target_link_libraries(faceattribute ${OpenCV_LIBS} mxnet)#链接mxnet库原创 2017-04-18 15:43:22 · 4359 阅读 · 0 评论 -
深度学习(五十七)tensorflow andorid yolo物体检测测试
一、修改tensorflow/workspace文件,取消android相关注释# Uncomment and update the paths in these entries to build the Android demo.android_sdk_repository( name = "androidsdk", api_level = 24, # Ensure t原创 2017-05-17 14:50:22 · 4489 阅读 · 8 评论 -
深度学习(五十六)tensorflow项目构建流程
import tensorflow.nn.rnn_celllstm = rnn_cell.BasicLSTMCell(lstm_size)#创建一个lstm cell单元类,隐藏层神经元个数为lstm_sizestate = tf.zeros([batch_size, lstm.state_size])#一个序列隐藏层的状态值loss = 0.0for current_batch_原创 2016-07-13 17:05:03 · 35191 阅读 · 14 评论 -
深度学习(五十五)tensorflow分布式训练
Cluster、Job、task概念:三者可以简单的看成是层次关系:task可以看成诗每台机器上的一个进程,每个机器一般只有一个task。多个task称之为job,job又有:ps、worker两种,分别用于参数服务、计算服务。如下图所示,可以看成有四台电脑,第一台电脑用于存储参数、共享参数、共享计算,可以简单的理解成内存、计算共享专用的区域,也就是ps job。另外三台电脑用于并行计算的,也就是原创 2017-03-10 15:02:41 · 42135 阅读 · 13 评论 -
深度学习(五十四)图片翻译WGAN实验测试
WGAN相比于GAN的优点在于:具有更高的稳定性。在原始的WGAN中,作者通过一堆的理论,提出了WGAN,理论证明n多页,不过代码实现就两行:(1)去掉了判别网络的判别的概念,在原始的GAN中,判别网络的损失函数为最大化交叉熵损失函数:也就是说判别网络的输出是一个0~1的概率值,用于表示图片真伪的概率。然而在WGANs中,fw的输出不需要是一个概率值,这就是为什么作者不把fw称之为判别器的原因,而原创 2017-03-04 21:12:17 · 7564 阅读 · 8 评论 -
深度学习(五十三)对抗网络
再举个实际一点的例子:假设有A、B两个人,A是银行的职员,其工作职责是判别真假人民币,防止假钞泛滥;B是专门造假钞的,他的职责是要尽量的造出更加逼真的人民币,来谋取利益。A、B为了混口饭吃,将在不断的相互对抗中,提高自己的专业技能;比如A的辨真伪能力提高了,那么B就需要再次提高自己的造假钞能力,来骗过A,否则原创 2017-02-25 15:28:51 · 3858 阅读 · 0 评论 -
深度学习(五十二)变分贝叶斯自编码器(下)
在生成模型中,假设样本数据X={xi}是根据某个随机过程进行采样得到,每个样本根据某个未知的概率分布函数相互独立采样得到,并且这个未知的概率分布取决于连续的潜变量Z。数据集采样过程分成两个步骤:(1)从先验分布函数采样样本zi;(2)根据条件概率分布函数,进而采样得到样本xi。即数据的生成过程如下:、表示是一个参数化的概率分布函数。然而真正的参数θ、Z都是未知的,而且这些分布函数对于真实数据分布都是相当复杂的。原创 2017-02-25 15:33:07 · 6127 阅读 · 1 评论 -
深度学习(五十一)变分贝叶斯自编码器(上)
度生成模型比较常碰到的有三个:对抗网络、变分自编码、DBN。学习深度生成模型,涉及到比较多的贝叶斯学派观点,所以公式难免一大堆,贝叶斯观点:对于每个观测数据x,是从分布函数x~p(x)中采样得到。比如对于手写数字数据,我们可以把它看成是从某个28*28维度的某个未知分布函数中,进行随机采样得到的样本。这篇博文我们先讲解深度生成模型中的经典算法:变分自编码器,主要参考文献:《Auto-Encoding Variational Bayes》。原创 2017-02-23 19:15:02 · 6871 阅读 · 3 评论 -
深度学习(五十)基于条件对抗网络的图片翻译
在图像处理领域,许多问题都涉及到图片到图片的转换问题,就像语言翻译一样,从英语到法语。类似于语言自动翻译一般,paper定义:图片的一种表示到另一种表示转换问题,命名为图片翻译问题。语言翻译之所以难,其中的一个问题在于两种语言之间不存在文字一一对应;同样的图片翻译问题,也可以是不一一对应的,比如一张图片可以表示成:边缘图片、语义标签、深度景深图片等;我们的目标是要找到一种通用的框架,用于各种图片翻译问题。原创 2017-02-21 19:23:20 · 3109 阅读 · 0 评论 -
深度学习(四十九)Tensorflow提高代码效率笔记
最近在自己从头到尾利用tensorflow写深度学习相关算法的时候,发现自己写的出来的模型,训练速度很慢,比caffe慢了n多倍,所以就查找了一下tensorflow官网,编写代码、提高效率,需要注意的细节。原创 2017-02-21 19:11:05 · 5059 阅读 · 1 评论 -
深度学习(四十八)InfoGAN学习笔记
本文是本人阅读《InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets》的学习笔记,文献目标其实是加入一个新的潜变量c,使得c与生成的样本具有较高的互信息。这样c用于表示数据某个方面的语义信息,z用于表示样本x中与c无关的其它信息。其实网络在最后实现的时候,infoGan可以看成三个网络组成:(1)生成网络x=G(c,z);(2)判别真伪网络y1=D1(x);(3原创 2017-02-18 11:10:40 · 15983 阅读 · 3 评论 -
深度学习(四十七)DSD正则化训练方法
这几年DNNs在诸多领域取得了重大突破,从计算机视觉到自然语言、语音识别,网络正则化是提高网络泛化能力的重要方法,深度学习常见正则化方法包括drop out、L2等正则。本文主要提出了一种DSD深度网络正则化训练方法。训练方法如下:(1)采用普通稠密网络进行训练;(2)网络修剪(权值比较小的全部修剪掉),转换成稀疏网络,然后进行训练;(3)释放稀疏约束,重新转化成稠密网络进行训练。原创 2017-01-15 20:33:29 · 2310 阅读 · 0 评论 -
深度学习(四十六)Adversarial Autoencoders学习笔记
如上图所示,x、z分别表示输入样本输入、编码向量z。p(z)是我们希望加入的潜变量先验分布,q(z|x)是编码分布函数,p(x|z)是解码分布函数,pd(x)表示真实的数据分布,p(x)表示模型数据分布。自编码网络编码函数q(z|x)。对抗自编码网络的每个mini-batch训练可以分成两个过程:原创 2017-01-13 18:58:45 · 12680 阅读 · 4 评论 -
深度学习(四十五)条件对抗网络
本文主要简单讲解文献:《Conditional Generative Adversarial Nets》,算法比较简单,只要懂对抗网络,基本上几分钟就可以看懂条件对抗网络的实现。一、算法概述在无条件对抗网络中,生成采样的样本是随机的,我们无法控制具体生成什么样的图片。加入条件模型,主要是直接在生成网络、判别网络中输入层中,分别加入额外的标签信息条件y,当然也可以是其它任意的条件信息。比如我们需要指定生成网络G用于生成一张具有微笑表情的人脸图片;同样的,D网络需要判别一张输入的图片,是否是一张具有微笑的伪原创 2017-01-13 13:58:47 · 5499 阅读 · 0 评论 -
深度学习(四十三)条件变分自编码器概述
目前深度学习主要以有监督学习为主,有监督需要大量的标注样本数据,我们做项目的时候,一般没有那么多数据。深度生成模型目前比较经典的有:对抗网络、变分自编码器、DBN(deep belief networks),主要应用于半监督、无监督学习,比如《Variational Autoencoder for Deep Learning of Images, Labels and Captions》、《Semi-supervised Learning with Deep Generative Models》。可能大家觉原创 2017-01-05 18:54:31 · 11486 阅读 · 1 评论 -
深度学习(四十二)word2vec词向量学习笔记
一、使用原版word2vec工具训练1、到官网到下载,然后选择export 到github2、编译:make3、下载测试数据http://mattmahoney.net/dc/text8.zip,并解压4、输入命令train起来:time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter原创 2016-06-02 10:57:56 · 11078 阅读 · 0 评论 -
深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建
1、一开始安装的时候,老是无法屏蔽另外一个驱动,最后就先用ubuntu的系统设置,附加驱动,先把nvidia的驱动给装上去,重启后,然后却无法进入alt+ctrl+f1终端确是黑屏的。只能通过alt+ctrl+f7 重新进入图形界面,重新切换回nouveau驱动。这个时候重启发现,竟然无法进入图形界面,因此应该是成功屏蔽了这没用的驱动1、安装cuda的过程中,一直跳出错误:If you'r原创 2016-07-22 21:36:58 · 37011 阅读 · 4 评论 -
深度学习(四十)caffe使用点滴记录
好在caffe为我们提供了一个可以用python编写新的网络层的方法,直接用python语言编写新的网络层,然后在caffe的网络配置文件,稍作修改,就可以轻松容易创建新的网络层。其具体环境配置搭建过程如下:1、编译caffe的时候,不能直接使用make pycaffe,而是应该使用:原创 2016-07-11 21:16:28 · 8133 阅读 · 1 评论 -
深度学习(三十九)可视化理解卷积神经网络(2.0)
学习文献:《Visualizing and Understanding Convolutional Networks》——利用反卷积神经网络可视化CNN学习目的:学习CNN可视化,了解CNN每层所学到的特征;学习dense prediction问题专用网络—反卷积神经网络之前已经写过卷积神经网络的可视化,最近做了一个新版总结PPT,同时也讲解了相关经典网络的应用场景,因此在此贴一下,分享给大家。原创 2016-06-26 11:38:50 · 7892 阅读 · 0 评论 -
深度学习(三十八)卷积神经网络入门学习(2.0)
CNN网络主要组成:卷积层、池化层、全连接层组成,上节所讲MLP只涉及到全连接层,所以我们学习一个CNN,首要的任务就是学习卷积层、池化层。声明:对于CNN来说,卷积层一般包含了两个基本操作:卷积+激活函数层(就像全连接层一样,也包含线性加权组织+激活函数层)。在后续讲解中,为了便于理解网络结构,我们先暂时忽略激活函数映射。原创 2016-06-26 10:54:58 · 7723 阅读 · 3 评论 -
深度学习(三十七)优化求解系列之(1)简单理解梯度下降
最近觉得有必要对深度学习的优化求解方法,以及各种网络的反向求导做一个总结,所以决定写一个系列文章:主要包含:理解梯度弥散、梯度溢出、BP、BPTT,以及RNN、CNN等各种网络层的求导方法,所以本篇文章将从最简单的梯度下降法开始讲起。一、什么是梯度下降法1、数学最小优化问题:已知一个任意函数L(w,x0,y0),x0,y0是个常数,w是自变量;(x0,y0是常数,因此我们也直接把函数写成L(w),我是因为后面为了讲解神经网络所以才把它们写出),L(w,x0,y0)可为任意复杂的函数,比如:原创 2016-06-05 17:08:20 · 3279 阅读 · 1 评论 -
深度学习(三十六)异构计算CUDA学习笔记(1)
二、CUDA编程步骤:1、设置显卡编号:cudaSetDevice;2、为显卡开辟变量内存:cudaMalloc;3、把cup上的数据拷贝到GPU上:cudaMemcpy;4、调用内核函数__global__类型函数;5、把计算结果拷贝到CPU上:cudaMemcpy;6、释放显存空间cudaFree;示例代码://计算a、b相加,得到c,size输入向量的维度c原创 2016-05-26 12:33:10 · 10085 阅读 · 0 评论 -
深度学习(三十五)异构计算GLSL学习笔记(1)
异构计算GLSL学习笔记(1)最近开始学习深度学习的一些gpu编程,大体学了cuda后,感觉要在手机上跑深度学习,没有nvidia显卡,不能加速。所以只能老老实实的学习opengl的shader编程,进行gpu通用计算加速,总的感觉shader编程比cuda编程难,还好自己之前研究生的时候,经常用opengl的一些API函数,对opengl比较了解。对于每一种语言,最简单的学习程序就是:h原创 2016-05-22 17:10:48 · 4306 阅读 · 0 评论 -
深度学习(三十三)CRF as RNN语义分割-未完待续
文献最大的意义在于把CRF的求解推理迭代过程看成了RNN的相关运算,嵌入CNN模型中,达到了真正的算法之间的融合。想要深入理解这篇文献,需要先学会文献《Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials》、《Fully Convolutional Networks for Semantic Segmentation》、《Semantic Image Segmentation with Deep Convoluti原创 2016-03-14 19:07:38 · 43560 阅读 · 13 评论 -
深度学习(三十二)半监督阶梯网络学习笔记
这几年深度学习声名鹊起,一个又一个AI领域被深度学习攻破,然而现在大部分深度学习所采用的算法都是有监督学习的方法,需要大量的标注数据,需要耗费大量的人力物力。因此如何充分利用大量的无标签数据资源,必将成为未来深度学习领域的研究焦点。本篇博文主要讲解2015年 NIPS的一篇牛逼paper:《Semi-Supervised Learning with Ladder Networks》,号称2015年深度学习领域"五大佳文"之一。这篇文献采用半监督的方法,充分利用了无标签数据+少量有标签数据,相比于以往的方法原创 2016-03-13 14:26:11 · 25939 阅读 · 5 评论 -
深度学习(三十一)基于深度矩阵分解的属性表征学习
半非负矩阵只是要求H为非负矩阵,对于数据矩阵X和基矩阵Z并没有要求。这个思想和聚类量化一样,Z的每一列表示聚类中心并不需要做非负约束,H表示稀疏编码矩阵。这使得我们可以从原始数据中学习到低维的特征。在机器学习中,特征这个词具体是什么东西?其实如果从矩阵分解的角度来讲的话,我们也可以矩阵H称之为:特征矩阵。本文提出一种无监督的学习方法,用于深度半非负矩阵分解,因为半监督非负矩阵分解和k均值聚类很相似,。本文的创新点:1、借助于深度学习的思想,提出贪婪的半非负矩阵分解方法,其思想与栈式自编码网络一样的训练方原创 2016-03-13 12:07:24 · 10719 阅读 · 1 评论 -
深度学习(三十)贪婪深度字典学习
本篇博文主要讲解paper:《Greedy Deep Dictionary Learning》,属于无监督表征学习领域的算法。近几年深度学习声名鹊起,一个又一个AI领域被深度学习攻破,然而现在大部分深度学习所采用的算法都是有监督学习的方法;稀疏自编码、受限玻尔兹曼机等无监督学习方法也随之渐渐的被人们所忽视。然而有监督学习需要大量的标注数据,需要耗费大量的人力物力。因此无监督学习必将成为未来深度学习领域的焦点,使得深度学习更接近于人类,因为无标签数据一抓一大把,到处都是。原创 2016-03-13 12:01:35 · 20396 阅读 · 10 评论 -
深度学习(二十九)Batch Normalization 学习笔记
近年来深度学习捷报连连,声名鹊起,随机梯度下架成了训练深度网络的主流方法。尽管随机梯度下降法,将对于训练深度网络,简单高效,但是它有个毛病,就是需要我们人为的去选择参数,比如学习率、参数初始化等,这些参数的选择对我们的训练至关重要,以至于我们很多时间都浪费在这些的调参上。那么学完这篇文献之后,你可以不需要那么刻意的去调整学习率这些参数。就像什么激活函数层、卷积层、全连接层一样,原创 2016-03-12 17:00:38 · 288015 阅读 · 76 评论