我所写的CNN框架 VS caffe
我所写的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的更多相关文章
- 一图看懂深度学习框架对比----Caffe Torch Theano TensorFlow
Caffe Torch Theano TensorFlow Language C++, Python Lua Python Python Pretrained Yes ++ Yes ++ Yes ...
- linger博客原创性博文导航
linger博客原创性博文导航 http://blog.csdn.net/lingerlanlan 大学研究游戏外挂技术開始了此博客.断断续续写了些博文. 后来,開始机器学习和深度学习的研究工作,因为 ...
- Caffe(卷积神经网络框架)介绍
Caffe(卷积神经网络框架)Caffe,全称Convolution Architecture For Feature Extraction caffe是一个清晰,可读性高,快速的深度学习框架.作者是 ...
- 卷积神经网络CNN与深度学习常用框架的介绍与使用
一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...
- 转:TensorFlow和Caffe、MXNet、Keras等其他深度学习框架的对比
http://geek.csdn.net/news/detail/138968 Google近日发布了TensorFlow 1.0候选版,这第一个稳定版将是深度学习框架发展中的里程碑的一步.自Tens ...
- CNN:Windows下编译使用Caffe和Caffe2
用于检测的CNN分为基于回归网络的方法和基于区域+CNN网络的方法,其中基于回归网络的方法典型为YOLO9000,可以兼容使用VGG-Net框架.其中基于区域+CNN网络方法,大量使用了Caffe作为 ...
- 来杯Caffe——在ubuntu下安装Caffe框架并测试
Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sud ...
- 深度学习框架caffe/CNTK/Tensorflow/Theano/Torch的对比
在单GPU下,所有这些工具集都调用cuDNN,因此只要外层的计算或者内存分配差异不大其性能表现都差不多. Caffe: 1)主流工业级深度学习工具,具有出色的卷积神经网络实现.在计算机视觉领域Caff ...
- ubuntu之路——day19.2 开源框架与迁移、CNN中的数据扩充
开源框架与迁移 上面介绍了一些已经取得很好成绩的CNN框架,我们可以直接从GitHub上下载这些神经网络的结构和已经在ImageNet等数据集上训练好的权重超参数. 在应用于我们自己的数据时. 1.如 ...
随机推荐
- JavaEE-01 JSP动态网页基础
学习要点 B/S架构的基本概念 Web项目的创建和运行 JSP页面元素 MyEclipse创建和运行Web项目 Web程序调试 Web简史 web前端技术演进三阶段 WEB 1.0:信息广播. WEB ...
- 暴力破解UltraEdit
使用x32dbg(x64dbg)做为破解工具: 使用x64dbg 打开 udeit64.exe 点击运行,直到UltraEdit启动,转到符号页: 找到: CheckForUpdatesNoPromp ...
- (11) openssl req(生成请求证书、私钥和自建CA)
伪命令req大致有3个功能:生成证书请求文件.验证证书请求文件和创建根CA. 由于openssl req命令选项较多,所以先各举几个例子,再集中给出openssl req的选项说明.若已熟悉opens ...
- 第一次:从今开始玩Linux,Ubuntu16.04
首先声明,我的文章不配图,就靠文字描述,然后自己体会,摸着石头体验吧! 从今天开始玩Linux,Ubuntu16.04据说是比较稳定的,界面友好,类似与Windows界面,也有Linux的命令终端,用 ...
- Python中的函数(5)
一.向函数中传递任意数量的实参 有时候,你预先不知道函数需要接受多少个实参,Python中函数可以收集任意数量的实参. 栗子:来看一个打印好友列表功能的函数,它需要接收任意数量的好友名.如下: def ...
- Root of AVL Tree
04-树5 Root of AVL Tree(25 分) An AVL tree is a self-balancing binary search tree. In an AVL tree, the ...
- python去掉BOM头的方法
今天在写批量生成身份证号造数据的时候出现了问题,其中一个是报不能转成int型,后经查找,发现是utf-8BOM头的问题. 什么是BOM? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示 ...
- SPOJ LCS2 多个串的最长公共子串
这里串最多有10个,找所有串的最长公共子串 这里后缀自动机做,以第一个串建立后缀自动机,后面的串一个个去匹配,每次得到当前串在可到达状态上所能得到的最长后缀长度 拿所有串匹配后得到的结果进行计算 #i ...
- 【贪心】HDU 最少拦截系统
https://vjudge.net/contest/68966#problem/I [题解] http://www.cnblogs.com/kuangbin/archive/2012/08/03/2 ...
- bzoj1086 [SCOI2005]王室联邦 树分块
[bzoj1086][SCOI2005]王室联邦 2014年11月14日2,6590 Description “余”人国的国王想重新编制他的国家.他想把他的国家划分成若干个省,每个省都由他们王室联邦的 ...