我所写的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.如 ...
随机推荐
- 基于Ubuntu 14.04 LTS编译Android4.4.2源代码
转载自:雨水:http://blog.csdn.net/gobitan/article/details/24367439 基于Ubuntu 14.04 LTS编译Android4.4.2源代码 ...
- 使用VS自带WCF测试客户端
打开VS自带WCF测试客户端 打开VS2015 开发人员命令提示 输入:wcftestclient,回车 提取wcftestclient 当然,可以看到VS2015 开发人员命令提示知道,当前路径在C ...
- 前端开发中的 meta 整理
meta是html语言head区的一个辅助性标签.也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,meta标签的作用有:搜索引擎优化(SEO),定义页面使用语言, ...
- My Friends
HMQ's blog RMY's blog Shq's blog wjyyy‘s blog
- CodeForces - 1105D Kilani and the Game(多源BFS+暴力)
题目: 给出一张游戏地图和每个玩家的位置,每次能移动的步数.p个玩家轮流移动占领地图中的格子(当格子已经被占领时就不能在占领了)在每个玩家都不能移动时游戏结束. 问在游戏结束后,每个玩家占领的格子的数 ...
- Android 图片设置圆角
Android中经常会遇到对图片进行二次处理,例如加圆角,或者显示圆形图片 方法一: 通过第三方框架Glide实现图片显示有圆角,有三种写法如下: 1.1,第一种实现: RequestOptions ...
- LeetCode(21)Merge Two Sorted Lists
题目 Merge two sorted linked lists and return it as a new list. The new list should be made by splicin ...
- LeetCode02-两数相加
''' 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示 ...
- 【转】C# windows服务的创建与调试
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- WebStorm下载安装
下载地址:https://www.jetbrains.com/webstorm/ 注册码: http://idea.codebeta.cn