主流深度学习框架简介
Caffe
http://caffe.berkeleyvision.org/
Caffe是伯克利人工智能研究室维护的深度学习库。
- 底层用c++实现
- 支持python接口
- 有大量的预训练模型库
- 支持CUDA
- 支持多块GPU
- 只能单机使用
http://deeplearning.net/software/theano/
Theano是蒙特利尔大学开源的深度学习库。
- 底层用python实现
- 接口只支持python一种
- 有预训练模型库
- 支持CUDA
- 支持多块GPU
- 只能单机使用
https://www.tensorflow.org/
TensorFlow是Google开源的深度学习框架。
- 底层用c++实现
- 支持 python,c++,Java,Go
- 没有预训练模型库,无法迁移学习
- 支持Cuda
- 支持多块GPU
- 支持集群
- 支持移动设备
http://mxnet.io/
MXNET是由开源社区DMLC发起的深度学习项目,目前MXNET已经被amazon AWS指定为官方深度学习平台。
- 底层用c++实现
- 支持Python、R、Scala、Julia、Perl、MATLAB、JavaScript语言。
- 支持CUDA
- 支持多块GPU
- 有预训练模型库,支持迁移学习
- 支持集群
- 支持移动设备
https://keras-cn.readthedocs.io
Keras是一个高层神经网络API,Keras由纯Python编写而成。Keras是一个模型级的库,提供了快速构建深度学习网络的模块。Keras依赖于处理张量的库称为“后端引擎”。Keras提供了两种后端引擎Theano/Tensorflow,并将其函数统一封装,使得用户可以以同一个接口调用不同后端引擎的函数。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:
- 简易和快速的原型设计
- 支持CNN和RNN
- 无缝CPU和GPU切换
文章图片
速度比较 可以看出MXNet,Torch和Caffe三者在性能上不相上下。这个符合预期,因为在单卡上评测的几个网络的绝大部分运算都由CUDA和CUDNN完成。TensorFlow比其他三者都慢2倍以上,这可能由于是低版本的CUDNN和项目刚开源的缘故。
内存占用 Caffe > TensorFlow > MXNET
编程模型比较 编程模型分为命令式和符号式两种。
关于不同编程模型各自的特点,参见:http://mxnet.io/architecture/program_model.html
【主流深度学习框架简介】Caffe是命令式架构,其余都是符号式架构。
非符号架构缺点:
- 命令构架主要的缺点实际上在于人工优化。例如,就地操作必须要人工实现。
- 大多命令构架设计得不够好,比不上符号构架的可表达性。
- 符号构架可能可以从依赖图中自动推导优化。
- 一个符号构架可以利用更多内存复用机会,这点 MXNET 做得很好。
- 符号构架能自动计算最佳进度表。
- Theano/MXNET: 可以用python内联c语言增加自定义操作,相对简单
- Caffe/TensorFlow: 需要用C++编写自定义操作,比较困难
- caffe: caffe的模型库是最全的,能够节省科研人员大量的时间,所以论文中引用caffe的最多。
https://github.com/BVLC/caffe/wiki/Model-Zoo
- Theano/Keras:可以使用构建在 Theano 上的高级构架Keras。可以在 Keras 中使用 Caffe 预训练模型权重。
https://github.com/fchollet/deep-learning-models
- TensorFlow:不支持预训练模型。
- MXNET:有一个 caffe 转换工具,能够转换基于 caffe 的预训练模型权重,使其可以适应 MXNET。本身也建立了一个模型库。
http://mxnet.io/model_zoo/index.html底层的张量(Tensor)操作支持度 对底层的张量操作支持度越高,则该框架越灵活,能够实现的模型越丰富。但同时也更难使用。
- Theano : 有很多基础操作
- TensorFlow: 最好
- MXNET: 支持较少
- Caffe: 需要自己读懂底层c++代码进行改写
详细的对比见: https://www.leiphone.com/news/201702/T5e31Y2ZpeG1ZtaN.htmlMXNET 教程
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 一起来学习C语言的字符串转换函数
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期
- 如何更好的去学习
- 【韩语学习】(韩语随堂笔记整理)
- 焦点学习田源分享第267天《来访》