所需工具
根据具体场景的需要(科研/工程),以及团队规模大小,开发人员能力等问题,选择合适的语言及框架和辅助工具来进行开发是十分必要的。这不但降低了开发难度,同时也提升了开发效率。
由于框架的快速发展,很多的标准及特性都在不断地变化,而又很少有人能够同时使用过多种框架进行开发,因此经过了大量资料收集之后,笔者对各类框架当前的特性进行了简洁的概况与比较。若想获得更加具体的描述,可以点击文章末尾的应用资料。
语言工具选择
区别与优劣:
1.python:
- 完全开源免费
- 基于 python 的框架很多: TensorFlow(Google), PyTorch(Facebook), Caffe2(Facebook/UC Barkely), PaddlePaddle(Badiu),Keras, CNTK(Microsoft), Theano, MXNet(Amazon)
- 框架开源免费,样例较多,易于部署,社区较为活跃
- 语言应用面广泛,上手快
- 其它类型库很多,易于一起使用
2.MATLAB:
- 商业软件,收费较贵(永久MATLAB+NN工具包:¥22,500)
- 工具箱封装的功能强大,功能较多
- 个别时候需要深入理解函数作用,学习时间可能更长
- 相对 python 的框架,使用者相对较少
- 可移植性相对 python 较弱
- 算法、仿真研究上优势较大,易于使用
3.Jupyter Notebook(IPython):
- 支持多语言:python, Julia, R, Scala
- 易于分享
- 交互式编程,可即时获得结果
图片引用来源: Jupyter Notebook 官网
4.C++:
- 计算速度高
- 维护及开发代价相对较高,属于底层语言
- 在需要开发新的算法等模块时,为必会语言
另外还有用于科学计算的语言 Julia, 用于大数据处理的 Scala,脚本语言 lua 等其他用于数据处理,分析的语言及工具
框架优劣及比较
图片引用来源:知乎/斯坦福cs231n课件
0.scikit-learn
开发团队: GitHub 开源社区的贡献者
简介: 基于 python 的第三方库,用于数据挖掘与数据分析,简单易用,以统计机器学习为主(深度学习相关框架参考之后的各个框架)。基于 NumPy, SciPy, matplotlib, 免费开源。
开源协议: BSD 2.0
1.Tensorflow
开发团队: Google
简介: 是 Google 的第二代人工智能学习系统,基于 Theano 框架进行了更多的优化与改进
开源协议: Apache 2.0
优势:
- Tensorflow 社区活跃,易于找到相关的模型及问题,整体框架的各类配套工具较为成熟
- Tensorflow 生产部署的方案成熟,从手机终端到服务器都比其他框架更加易于部署
- Tensorflow 主要向 python 提供 API 开发,同时也向 Java, Go, C++, Haskell, Rust 提供。
- Tensorflow 本身之上也有 Keras 等高层框架,可以高效开发,以及之后 Tensorflow 带来的部署优势
- 根据 cs231n 中的总结, Tensorflow 在处理 RNN 及大规模并行深度学习时的能力非常强大
- 有 Tensorflow Serving 可以直接加载模型来提供 RPC 接口服务
- 在完成了定义流程图后,可以进行自动推导,节省了很多的工作
劣势:
- Tensorflow 上手难度较大,实际上是一门新的语言,很多开发者反映写起来很麻烦
- 不适合做快速的想法验证
- 各论文目前所使用的框架中 Tensorflow 比例仍相对较低
- 有很多地方属于黑箱操作,难以理解处理的原理,调试较难
- 功能扩张速度过快,导致现在实际的训练速度很不理想, arxiv 中的一篇论文显示(引用资料[2])性能表现在各个框架中最差
2.PyTorch
开发团队: Facebook 等企业与高校
开源协议: BSD 2.0
优势:
- 相对 Tensorflow 更加易于上手,代码为 python 风格,而非自己创立的语言,开发效率较高
- 中间过程更加透明,易于 debug 调试及学习
- 对大部分人来说(除专家级),由于能力问题,写出的代码在训练时要比 Tensorflow 的快
- 更适合小型团队的使用与开发
- 框架本身的源代码相对清晰,可读性强,比 Tensorflow 要更加易懂
劣势:
- 大部分情况下,速度能力是不如 TensorFlow 的,如 AlexNet 等经典的神经网络,详情见引用资料[2] 的论文中关于各种模式下,各个框架的表现能力。
- 仍在 Beta 测试阶段,底层及框架出现 bug 的概率比 TensorFlow 更高
- 社区用户除了从原 Torch 迁移过来的人以外,不如 TensorFlow 的用户多
3. Caffe2
开发团队: Facebook
开源协议: Apache 2.0
简介: Facebook 开发 Caffe2 的目的在于产品应用,而 PyTorch 一般用于研究与想法的实现。同时,Caffe2 的思路更接近于 TensorFlow,与 PyTorch 不同,使用的是静态图,而 Torch 使用的是动态图,因此灵活性上不如 Torch,更加专注于速度表现。
优势:
- 速度 快
- 相比 Caffe 只支持C++, 支持 C++ 与 python API
- 在移动端部署做的很好,可能优于 TensorFlow,但暂无数据证明。不过在工业应用以及分布式训练中强于 PyTorch,更专注于移动端的表现。
- 可以将原 Caffe 的模型转换至 Caffe2
- 与 PyTorch 同属于 Facebook,之间正在建立沟通协议,共享后端。
- 可以简单地调用预先训练好的 Model Zoo 模型
劣势:
- 社区不如 TensorFlow 成熟
- 训练的灵活程度不如 PyTorch
4. MXNet
开发团队: 陈天奇等人, 现获 Amazon 投资及支持
优势:
- 支持语言多:python, R, MATLAB, Julia, Go, Scala, Javascript
- 专注于深度学习核心,优化好,训练速度快。由于 MXNet 一直专注于性能的优化,而非如 TensorFlow 一样做功能上的扩展,因此在表现上是占优势的。
- 亚马逊的云服务支持,如今亚马逊的 AWS 云计算服务已经默认 MXNet 作为学习框架
- MXNet 的执行步骤相对 TensorFlow 更加地灵活
劣势:
- 社区活跃度较低
- 对新手友好程度一般,文档完善程度不够(但在获得亚马逊支持后在改善)
5. PaddlePaddle
开发团队: Baidu
开源协议: Apache 2.0
优势:
- 简单易用,尤其是对于已有的模型,只需改变参数和数据即可
- 中文文档非常友好
- 主程序源码使用 C++ 编写,相对易于阅读
- 似乎尤其适合处理 NLP(自然语言处理) 相关的问题
劣势:
- 文档数量较少
- 不适合开发新的算法或功能,因为二次开发需要从底层 C++ 写起
6. Keras
开发团队: GitHub/Keras 团队
开源协议: MIT
优势:
- 上手快,新手友好,简单模型开发效率高
- 可以灵活选择底层框架:目前支持 TensorFlow, CNTK, Theano
- 同时具有扩展性与易用性,可以自己增加所需的算法等模块
- 以层(layer)作为概念进行封装,易懂
劣势:
- 性能表现不差,但并非优势
- 灵活性的前提是需要熟悉 TensorFlow 或其它的一门底层语言,同时需要阅读一定量的 Keras 源码,因此 灵活性的实现有前置代价
- 仅支持 python
7. CNTK
开发团队: Microsoft
开源协议: C++ 部分采用 Boost Software License,数据集部分另有其它协议
简介: 仅从 GitHub 的 Star 和 PR 上来看,此项目的活跃程度并不低,只不过国内的知名程度与使用率相比于其它框架要小很多
优势:
- 各类比较的性能中,处于中等偏上位置,往往仅次于 MXNet
劣势:
- 国内的使用人数少,相关资料少
- 新手不友好,不易于安装,建议使用 Docker 进行隔离安装
8. deeplearning4j
开发团队: Eclipse
开源协议: Apache 2.0
优势:
- 以 Java 为开发语言,享受Java 虚拟机带来的跨平台优势
- 有一些不错的例子以供学习
- 使用 cuDnn 时速度与其他框架
- 支持 Scala
劣势:
- 在训练时内存的垃圾回收(GC)导致性能会出现下降,作者正在改进中
- 国内使用人数较少
- 文档相对简单
引用资料
- 2017年1月18日Facebook发行的PyTorch相比TensorFlow、MXNet有何优势? https://www.zhihu.com/question/54914188
- S.Shi et al., Benchmarking State-of-the-Art Deep Learning Software Tools, https://arxiv.org/pdf/1608.07249v7.pdf
- Stanford University, cs231n :Convolutional Neural Networks for Visual Recognition, http://cs231n.stanford.edu/
- 杜客等, cs231n 笔记中文译稿, https://zhuanlan.zhihu.com/p/21930884
- 雷锋网, 框架对比,https://www.leiphone.com/news/201709/3T4pwc5UBLtRuKvx.html
- 知乎, Keras,Theano,pytorch,caffe2 哪个更好一些,应该怎么尝试学习?, https://www.zhihu.com/question/59274399
- 知乎, 如何评价TensorFlow和其它深度学习系统,https://weibo.com/p/1001603907610737775666
- 知乎, 如何评价Caffe2,https://www.zhihu.com/question/58698158/answer/158139047
- GitHub, chenrudan, TensorFlow、MXNet、PaddlePaddle三个开源库对比, http://chenrudan.github.io/blog/2017/02/25/comparetfmxpd.html
- CSDN, mxnet 使用体验, http://blog.csdn.net/u013713010/article/details/71635814
- 机器之心, 深度 | 亚马逊挑中MXNet后,机器之心和他们聊了聊, http://tech.huanqiu.com/news/2016-11/9726439.html
- 知乎,Deeplearning4j运行效率怎么样?Mnist案例运行时间大约多少?,https://www.zhihu.com/question/49509850
- 简书, 鱼心DrFish, 左手程序员,右手作家:你必须会的Jupyter Notebook,https://www.jianshu.com/p/86117613b7a6