原址

所需工具

根据具体场景的需要(科研/工程),以及团队规模大小,开发人员能力等问题,选择合适的语言及框架和辅助工具来进行开发是十分必要的。这不但降低了开发难度,同时也提升了开发效率。
由于框架的快速发展,很多的标准及特性都在不断地变化,而又很少有人能够同时使用过多种框架进行开发,因此经过了大量资料收集之后,笔者对各类框架当前的特性进行了简洁的概况与比较。若想获得更加具体的描述,可以点击文章末尾的应用资料。

语言工具选择

区别与优劣:
1.python:

  1. 完全开源免费
  2. 基于 python 的框架很多: TensorFlow(Google), PyTorch(Facebook), Caffe2(Facebook/UC Barkely), PaddlePaddle(Badiu),Keras, CNTK(Microsoft), Theano, MXNet(Amazon)
  3. 框架开源免费,样例较多,易于部署,社区较为活跃
  4. 语言应用面广泛,上手快
  5. 其它类型库很多,易于一起使用

2.MATLAB:

  1. 商业软件,收费较贵(永久MATLAB+NN工具包:¥22,500)
  2. 工具箱封装的功能强大,功能较多
  3. 个别时候需要深入理解函数作用,学习时间可能更长
  4. 相对 python 的框架,使用者相对较少
  5. 可移植性相对 python 较弱
  6. 算法、仿真研究上优势较大,易于使用

3.Jupyter Notebook(IPython):

  1. 支持多语言:python, Julia, R, Scala
  2. 易于分享
  3. 交互式编程,可即时获得结果

图片引用来源: Jupyter Notebook 官网

4.C++:

  1. 计算速度高
  2. 维护及开发代价相对较高,属于底层语言
  3. 在需要开发新的算法等模块时,为必会语言

另外还有用于科学计算的语言 Julia, 用于大数据处理的 Scala,脚本语言 lua 等其他用于数据处理,分析的语言及工具

框架优劣及比较

图片引用来源:知乎/斯坦福cs231n课件

0.scikit-learn

开发团队: GitHub 开源社区的贡献者

简介: 基于 python 的第三方库,用于数据挖掘与数据分析,简单易用,以统计机器学习为主(深度学习相关框架参考之后的各个框架)。基于 NumPy, SciPy, matplotlib, 免费开源。

开源协议: BSD 2.0

1.Tensorflow

开发团队: Google

简介: 是 Google 的第二代人工智能学习系统,基于 Theano 框架进行了更多的优化与改进

开源协议: Apache 2.0

优势:

  1. Tensorflow 社区活跃,易于找到相关的模型及问题,整体框架的各类配套工具较为成熟
  2. Tensorflow 生产部署的方案成熟,从手机终端到服务器都比其他框架更加易于部署
  3. Tensorflow 主要向 python 提供 API 开发,同时也向 Java, Go, C++, Haskell, Rust 提供。
  4. Tensorflow 本身之上也有 Keras 等高层框架,可以高效开发,以及之后 Tensorflow 带来的部署优势
  5. 根据 cs231n 中的总结, Tensorflow 在处理 RNN 及大规模并行深度学习时的能力非常强大
  6. 有 Tensorflow Serving 可以直接加载模型来提供 RPC 接口服务
  7. 在完成了定义流程图后,可以进行自动推导,节省了很多的工作

劣势:

  1. Tensorflow 上手难度较大,实际上是一门新的语言,很多开发者反映写起来很麻烦
  2. 不适合做快速的想法验证
  3. 各论文目前所使用的框架中 Tensorflow 比例仍相对较低
  4. 有很多地方属于黑箱操作,难以理解处理的原理,调试较难
  5. 功能扩张速度过快,导致现在实际的训练速度很不理想, arxiv 中的一篇论文显示(引用资料[2])性能表现在各个框架中最差

2.PyTorch

开发团队: Facebook 等企业与高校

开源协议: BSD 2.0

优势:

  1. 相对 Tensorflow 更加易于上手,代码为 python 风格,而非自己创立的语言,开发效率较高
  2. 中间过程更加透明,易于 debug 调试及学习
  3. 对大部分人来说(除专家级),由于能力问题,写出的代码在训练时要比 Tensorflow 的快
  4. 更适合小型团队的使用与开发
  5. 框架本身的源代码相对清晰,可读性强,比 Tensorflow 要更加易懂

劣势:

  1. 大部分情况下,速度能力是不如 TensorFlow 的,如 AlexNet 等经典的神经网络,详情见引用资料[2] 的论文中关于各种模式下,各个框架的表现能力。
  2. 仍在 Beta 测试阶段,底层及框架出现 bug 的概率比 TensorFlow 更高
  3. 社区用户除了从原 Torch 迁移过来的人以外,不如 TensorFlow 的用户多

3. Caffe2

开发团队: Facebook

开源协议: Apache 2.0

简介: Facebook 开发 Caffe2 的目的在于产品应用,而 PyTorch 一般用于研究与想法的实现。同时,Caffe2 的思路更接近于 TensorFlow,与 PyTorch 不同,使用的是静态图,而 Torch 使用的是动态图,因此灵活性上不如 Torch,更加专注于速度表现。

优势:

  1. 速度
  2. 相比 Caffe 只支持C++, 支持 C++ 与 python API
  3. 在移动端部署做的很好,可能优于 TensorFlow,但暂无数据证明。不过在工业应用以及分布式训练中强于 PyTorch,更专注于移动端的表现。
  4. 可以将原 Caffe 的模型转换至 Caffe2
  5. 与 PyTorch 同属于 Facebook,之间正在建立沟通协议,共享后端
  6. 可以简单地调用预先训练好的 Model Zoo 模型

劣势:

  1. 社区不如 TensorFlow 成熟
  2. 训练的灵活程度不如 PyTorch

4. MXNet

开发团队: 陈天奇等人, 现获 Amazon 投资及支持

优势:

  1. 支持语言多:python, R, MATLAB, Julia, Go, Scala, Javascript
  2. 专注于深度学习核心,优化好,训练速度快。由于 MXNet 一直专注于性能的优化,而非如 TensorFlow 一样做功能上的扩展,因此在表现上是占优势的。
  3. 亚马逊的云服务支持,如今亚马逊的 AWS 云计算服务已经默认 MXNet 作为学习框架
  4. MXNet 的执行步骤相对 TensorFlow 更加地灵活

劣势:

  1. 社区活跃度较低
  2. 对新手友好程度一般,文档完善程度不够(但在获得亚马逊支持后在改善)

5. PaddlePaddle

开发团队: Baidu

开源协议: Apache 2.0

优势:

  1. 简单易用,尤其是对于已有的模型,只需改变参数和数据即可
  2. 中文文档非常友好
  3. 主程序源码使用 C++ 编写,相对易于阅读
  4. 似乎尤其适合处理 NLP(自然语言处理) 相关的问题

劣势:

  1. 文档数量较少
  2. 不适合开发新的算法或功能,因为二次开发需要从底层 C++ 写起

6. Keras

开发团队: GitHub/Keras 团队

开源协议: MIT

优势:

  1. 上手快,新手友好,简单模型开发效率高
  2. 可以灵活选择底层框架:目前支持 TensorFlow, CNTK, Theano
  3. 同时具有扩展性与易用性,可以自己增加所需的算法等模块
  4. 以层(layer)作为概念进行封装,易懂

劣势:

  1. 性能表现不差,但并非优势
  2. 灵活性的前提是需要熟悉 TensorFlow 或其它的一门底层语言,同时需要阅读一定量的 Keras 源码,因此 灵活性的实现有前置代价
  3. 仅支持 python

7. CNTK

开发团队: Microsoft

开源协议: C++ 部分采用 Boost Software License,数据集部分另有其它协议

简介: 仅从 GitHub 的 Star 和 PR 上来看,此项目的活跃程度并不低,只不过国内的知名程度与使用率相比于其它框架要小很多

优势:

  1. 各类比较的性能中,处于中等偏上位置,往往仅次于 MXNet

劣势:

  1. 国内的使用人数少,相关资料少
  2. 新手不友好,不易于安装,建议使用 Docker 进行隔离安装

8. deeplearning4j

开发团队: Eclipse

开源协议: Apache 2.0

优势:

  1. 以 Java 为开发语言,享受Java 虚拟机带来的跨平台优势
  2. 有一些不错的例子以供学习
  3. 使用 cuDnn 时速度与其他框架
  4. 支持 Scala

劣势:

  1. 在训练时内存的垃圾回收(GC)导致性能会出现下降,作者正在改进中
  2. 国内使用人数较少
  3. 文档相对简单

引用资料

  1. 2017年1月18日Facebook发行的PyTorch相比TensorFlow、MXNet有何优势? https://www.zhihu.com/question/54914188
  2. S.Shi et al., Benchmarking State-of-the-Art Deep Learning Software Tools, https://arxiv.org/pdf/1608.07249v7.pdf
  3. Stanford University, cs231n :Convolutional Neural Networks for Visual Recognition, http://cs231n.stanford.edu/
  4. 杜客等, cs231n 笔记中文译稿, https://zhuanlan.zhihu.com/p/21930884
  5. 雷锋网, 框架对比,https://www.leiphone.com/news/201709/3T4pwc5UBLtRuKvx.html
  6. 知乎, Keras,Theano,pytorch,caffe2 哪个更好一些,应该怎么尝试学习?, https://www.zhihu.com/question/59274399
  7. 知乎, 如何评价TensorFlow和其它深度学习系统,https://weibo.com/p/1001603907610737775666
  8. 知乎, 如何评价Caffe2,https://www.zhihu.com/question/58698158/answer/158139047
  9. GitHub, chenrudan, TensorFlow、MXNet、PaddlePaddle三个开源库对比, http://chenrudan.github.io/blog/2017/02/25/comparetfmxpd.html
  10. CSDN, mxnet 使用体验, http://blog.csdn.net/u013713010/article/details/71635814
  11. 机器之心, 深度 | 亚马逊挑中MXNet后,机器之心和他们聊了聊, http://tech.huanqiu.com/news/2016-11/9726439.html
  12. 知乎,Deeplearning4j运行效率怎么样?Mnist案例运行时间大约多少?,https://www.zhihu.com/question/49509850
  13. 简书, 鱼心DrFish, 左手程序员,右手作家:你必须会的Jupyter Notebook,https://www.jianshu.com/p/86117613b7a6

机器学习入门(二):工具与框架的选择相关推荐

  1. MNIST机器学习入门(二)

    在前一个博客中,我们已经对MNIST 数据集和TensorFlow 中MNIST 数据集的载入有了基本的了解.本节将真正以TensorFlow 为工具,写一个手写体数字识别程序,使用的机器学习方法是S ...

  2. 机器学习入门:入手sklearn框架+线性回归+案例(基金数据的预测)

    读取基金数据,然后画线 # coding: utf-8 import pandas as pd import matplotlib.pyplot as plt# 读取csv文件里的基金数据 fund ...

  3. 机器学习入门(二) 准备工作

    今天总结的是端对端的机器学习项目,由于内容较多,我就分开总结了. 首先先介绍下这次的项目案例:假设你是一个房地产公司最新雇佣的数据科学家,以下是你将会经历的主要步骤: 1.观察大局 2.获得数据 3. ...

  4. 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  5. 机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  6. 机器学习入门笔记(一):模型性能评价与选择

    文章目录 一.训练误差与测试误差 1.1 基本概念 1.2 训练误差 1.3 泛化误差(测试误差) 1.4 过拟合 二.模型评估方法 2.1 留出法(hold-out) 2.2 正则化 2.3 交叉验 ...

  7. 机器学习入门基本使用工具(保姆式教学):matplotlib,numpy,pandas这一篇就够了

    学习机器学习,以及python会用到一些工具,小编在这里列举一些出来,足够正常的机器学习使用,一些不常用的工具小编这里学的也不多,不过这篇博客会后续继续更新. 注意:代码中含有>>> ...

  8. TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅

    TensorFlow学习笔记(二):快速理解Tutorial第一个例子-MNIST机器学习入门 标签: 机器学习SoftmaxTensorFlow教程 2016-08-02 22:12 3729人阅读 ...

  9. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

最新文章

  1. TCP网络应用程序的注意点
  2. c语言自动机的建立,C语言最优状态机规范
  3. SpringMVC Controller介绍(转)
  4. Apache Tomcat 拒绝服务漏洞通告
  5. 记一次关于SSM框架的使用错误
  6. 谷歌的网页排序算法(PageRank Algorithm)
  7. 遍历Windows系统的内核模块(源码)
  8. 删除Nifi中的template
  9. php用不了for循环吗,php中的这两个for循环有什么区别吗?
  10. [c#基础]使用抽象工厂实现三层
  11. 关于power shell
  12. 狂神说Redis笔记三
  13. [天地间]02-瑞士达沃斯小镇
  14. 微信小程序退出到微信
  15. ubuntu服务器系统进入安全模式,ubuntu bios 无法进入安全模式
  16. 03 ,seaborn 颜色 : 正态分布图,多元正态分布,核密度估计图
  17. 搜索引擎排名都选乐云seo_乐云百度爱采购排名关键词的部署方法_乐云SEO
  18. 解决error while loading shared libraries: xxx.so.x类似问题办法和错误原因
  19. win7安装linux子系统,linux系统装win7系统安装教程【图文教程】
  20. omapl138移植uboot系列之添加属于我们自己的板卡(第四篇)

热门文章

  1. mybatis(二)
  2. 《JavaScript权威指南》笔记(四)
  3. java httpclient 包_java实现http请求之HttpClient
  4. java 指针 引用_C++中的指针和引用与Java中的引用区别
  5. python 闭包的作用_python中对闭包的理解
  6. STM32F429HAL库ADCDMA学习笔记
  7. 如何理解halcon 算子get_grayval 、set_grayval 逐行读取和逐行写入
  8. NLP --- 隐马尔可夫HMM(第三个问题详解及HMM的应用)
  9. 高端网站建设css3动画响应式模板_集团网站建设高端网站搭建
  10. android伸缩动画,Android 伸缩动画xml配置