我所写的CNN框架 VS caffe

一个月前。自己模仿caffe实现了一个卷积神经网络的框架。

同样点

1无缝支持CPU和GPU模式,GPU模式使用cuda实现。

不同点

1我的CNN不依赖与不论什么第三方的函数库,caffe用到了第三方的数学函数库(cublas和mkl)来做矩阵操作。

事实上差别就在于,caffe採用了矢量化编程的方法,如ufldl教程所说http://deeplearning.stanford.edu/wiki/index.php/%E7%9F%A2%E9%87%8F%E5%8C%96%E7%BC%96%E7%A8%8B。

---------------------------------------------------------------------------------------------------------------

矢量化编程是提高算法速度的一种有效方法。为了提升特定数值运算操作(如矩阵相乘、矩阵相加、矩阵-向量乘法等)的速度,数值计算和并行计算的研究人员已经努力了几十年。

矢量化编程的思想就是尽量使用这些被高度优化的数值运算操作来实现我们的学习算法。

---------------------------------------------------------------------------------------------------------------

这也解释了caffe比我的快的原因。

对于cpu模式,我仅仅是简单的用for循环了实现一些矩阵操作。

对于gpu模式,尽管用到了cuda的线程模型。有一定的并行度。可是并没有人家的数学函数库那么快。

要想超过caffe的速度,这里也是切入点之中的一个。

方法1:找到比cublas更快的数学库。

方法2:精通GPU编程。研究cublas等源代码,提高数据的利用率。其有用cublas等函数库也是有一个致命缺点的。函数仅仅能给你返回终于结果。中间结果不会保存。

可是非常可能存在这么一种情况。这些中间结果可能下次操作会用到,假设能用到,速度必定更加,否则得又一次计算。浪费时间。所以,假设对cublas源代码精通,或者能设计出比她更高性能的数值运算操作,我们就能够保存一些中间结果。提高数据的利用率,达到性能上的提高。

当然。这里还有指出。并非全部操作都能转换为矢量化编程。gpu模式下,caffe里面有一些操作也是自己写核函数实现的。不能用现有的函数实现,比方pool层的正向传播和反向传播。

2 类设计和内存设计

我的CNN类设计比caffe清晰,每一层的特征值,权重值,都有一个类,而caffe都用blob。

从代码的清晰度来看,我的比caffe好。

可是从性能上来讲,就不行了。

caffe的blob内存设计是数据密集型的。我的CNN特征值,权重值等数据在不同的对象中,因此从内存上来看也是分开的。

这恰好是caffe的巧妙指出。仅仅有数据在连续的内存空间,才干够方便的用到第三方的函数库的矩阵操作来实现矢量化编程。

而我,仅仅能用多个循环来操作。

3 迭代方法

尽管用的都是随机梯度下降法来求最优解。

可是我的是每次一张图片。

而caffe每次一批图片。

除了上面提到的一些提高性能的方法,

还想到一点。就是实现内存池,优化内存的使用。

肯定有些操作,会申请暂时空间,然后用完了就丢弃。

这时就能够用内存池来优化了。

唉,现实是残酷的。可惜我如今还是没有能力写出比caffe更快的。由于对GPU编程和矢量化编程不够精通。这个我所写CNN暂且就被丢弃了。先用caffe玩,毕竟研究人家代码有非常多可取之处。

本文作者:   linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/38121443

我所写的CNN框架 VS caffe的更多相关文章

  1. 一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow

      Caffe Torch Theano TensorFlow Language C++, Python Lua Python Python Pretrained Yes ++ Yes ++ Yes ...

  2. linger博客原创性博文导航

    linger博客原创性博文导航 http://blog.csdn.net/lingerlanlan 大学研究游戏外挂技术開始了此博客.断断续续写了些博文. 后来,開始机器学习和深度学习的研究工作,因为 ...

  3. Caffe(卷积神经网络框架)介绍

    Caffe(卷积神经网络框架)Caffe,全称Convolution Architecture For Feature Extraction caffe是一个清晰,可读性高,快速的深度学习框架.作者是 ...

  4. 卷积神经网络CNN与深度学习常用框架的介绍与使用

    一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...

  5. 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比

    http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...

  6. CNN:Windows下编译使用Caffe和Caffe2

    用于检测的CNN分为基于回归网络的方法和基于区域+CNN网络的方法,其中基于回归网络的方法典型为YOLO9000,可以兼容使用VGG-Net框架.其中基于区域+CNN网络方法,大量使用了Caffe作为 ...

  7. 来杯Caffe——在ubuntu下安装Caffe框架并测试

    Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sud ...

  8. 深度学习框架caffe/CNTK/Tensorflow/Theano/Torch的对比

    在单GPU下,所有这些工具集都调用cuDNN,因此只要外层的计算或者内存分配差异不大其性能表现都差不多. Caffe: 1)主流工业级深度学习工具,具有出色的卷积神经网络实现.在计算机视觉领域Caff ...

  9. ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充

    开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...

随机推荐

  1. 在实现栈中原来功能的基础上,获得一个栈中最小值,要求时间复杂度 bigO(1)

    思路: 准备两个栈 stackData stackMin package my_basic; import java.util.Stack; public class GetMinStack { St ...

  2. [IOS初学]ios 第一篇 storyboard 与viewcontroller的关系 - Zoe_J

    时间 2014-07-27 16:08:00  博客园-所有随笔区 原文  http://www.cnblogs.com/zoe-j/p/3871501.html 主题 StoryBoard 学习了一 ...

  3. 二叉树的创建一数据结构一C++

    #include <iostream> using namespace std; //二叉树结点typedef struct BitNode                {    cha ...

  4. crontab 和 supervisor

    crontab linux系统自带的工具,可以做定时任务,最小间隔是1分钟 配置crontab 命令 如果是以root用户编辑的,那么最后运行也是以root用户运行脚本文件 crontab -e 命令 ...

  5. 爬虫app信息抓取之apk反编译抓取

    之前也抓过一些app,数据都比较好取,也没有研究的太深,毕竟还有android 模拟器+ appium 的方法.直到遇见了一款app ,具体名字就不说了,它安装在模拟器上竟然打不开 !!第一次遇见上网 ...

  6. 计蒜客 Overlapping Rectangles (离散化)

    题意: 给定一个坐标系, 给出n个矩形的左下角坐标(bx,by)和右上角坐标(tx,ty) , 求矩形覆盖的面积, 有些区域会被多个矩形覆盖, 但只用算一次. n <= 1000,  0 < ...

  7. 【02】GitHub 工具 Octotree

    #推荐一个 GitHub 工具 Octotree Chrome extension 它可以让你在看任何仓库时,获得一个左边的树状图.

  8. 异常 Failed to bind NettyServer on /10.133.7.216:29105, cause: Failed to bind to: /0.0.0.0:29105

    "C:\Program Files\Java\jdk1.7.0_80\bin\java" -agentlib:jdwp=transport=dt_socket,address=12 ...

  9. POJ1201:Intervals【差分约束】

    题目大意:给出N个闭区间,每个区间给出一个ci值,让你找出最小的数集Z使得每个闭区间都有不少于ci个Z中的元素,求card(Z) 思路:06年集训队论文<浅析差分约束系统>有详细的解题,设 ...

  10. 【概率dp】D. Card Collector

    https://www.bnuoj.com/v3/contest_show.php?cid=9147#problem/D [题意] 为了集齐n张卡片,必须要买多少袋零食?题目给定每种卡片出现在零食中的 ...