开源深度学习主流框架哪个最适合你
发布人: Srcsh 日期:2018-11-19 浏览:300人次
开源深度学习主流框架哪个最适合你 GPU World
目录
TensorFlow
Theano、Pylearn2 及其生态系统
Torch
Caffe
CNTK
DSSTNE、MXNet
TensorFlow
目前 TensorFlow 还不支持所谓的“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算。复制非常大的矩阵会导致成本全面偏高。TF 运行所需的时间是最新深度学习工具的四倍。谷歌表示正在解决这一问题。
和大多数深度学习框架一样,TensorFlow 是用一个 Python API 编写的,通过 C/C++ 引擎加速。这种解决方案并不适合 Java 和 Scala 用户群。
TensorFlow 的用途不止于深度学习。TensorFlow 其实还有支持强化学习和其他算法的工具。
谷歌似乎也已承认 TF 的目标是招募人才。众所周知,他们最近公布了为期一年的谷歌大脑(Google Brain)人才培训项目。真是明智的举措。
TensorFlow 不提供商业支持,而谷歌也不太可能会从事支持开源企业软件的业务。谷歌的角色是为研究者提供一种新工具。
和 Theano 一样,TensforFlow 会生成计算图(如一系列矩阵运算,例如 z = simoid(x),其中 x 和 z 均为矩阵),自动求导。自动求导很重要,否则每尝试一种新的神经网络设计就要手动编写新的反向传播算法,没人愿意这样做。在谷歌的生态系统中,这些计算图会被谷歌大脑用于高强度计算,但谷歌还没有开放相关工具的源代码。TensorFlow 可以算是谷歌内部深度学习解决方案的一半。从企业的角度看,许多公司需要思考的问题在于是否要依靠谷歌来提供这些工具。
TensorFlow 的利与弊
(+) Python + NumPy
(+) 与 Theano 类似的计算图抽象化
(+) 编译时间比 Theano 快很多
(+) 用 TensorBoard 进行可视化
(+) 同时支持数据并行和模型并行
(-) 速度比其他框架慢
(-) 比 Torch 笨重许多;更难理解
(-) 已预定型的模型不多
(-) 计算图纯粹基于 Python,所以速度较慢
Theano及其生态系统
深度学习领域的学术研究者大多依赖 Theano,Theano 是深度学习框架中的元老,用 Python 编写。Theano 和 NumPy 一样,是处理多维数组的学习库。Theano 可与其他学习库配合使用,非常适合数据探索和研究活动。
现在已有大量基于 Theano 的开源深度学习库,包括 Keras、 Lasagne 和 Blocks。这些学习库试着在 Theano 有时不够直观的界面之上添加一层便于使用的 API。
相比之下,Deeplearning4j 的目标是成为深度学习领域的 Scikit-learn,力求以可扩展、多个 GPU 或 CPU 并行的方式让尽可能多的控制点实现自动化,在需要时与 Hadoop 和 Spark 集成。
Theano 的 利与弊
(+) Python + NumPy
(+) 计算图是良好的抽象化方式
(+) RNN 与计算图匹配良好
(+) 高级的包装界面(Keras、Lasagne)减少了使用时的麻烦
(-) 原始的 Theano 级别偏低
(-) 错误信息可能没有帮助
(-) 大型模型的编译时间可能较长
(-) 比 Torch 笨重许多;更难理解
(-) 对已预定型模型的支持不够完善
Torch
Torch 是用 Lua 编写的计算框架,支持机器学习算法。谷歌 DeepMind、Facebook 等大型科技公司使用 Torch 的某些版本,由内部团队专门负责定制自己的深度学习平台。Lua 是上世纪九十年代早期在巴西开发的多范例脚本语言。
Torch7 虽然功能强大,但其设计并不适合在两个群体中大范围普及,即主要依赖 Python 的学术界,以及普遍使用 Java 的企业软件工程师。Deeplearning4j用Java编写,反映了我们对行业应用和使用便利的重视。我们认为可用性是阻碍深度学习实施工具广泛普及的限制因素。我们认为可扩展性应当通过Hadoop和Spark这样的开源分布式运行时系统来实现自动化。我们还认为,从确保工具正常运作和构建社区两方面来看,提供商业支持的开源框架是最恰当的解决方案。
Torch 的利与弊:
(+) 大量模块化组件,容易组合
(+) 很容易编写自己的层类型并在GPU上运行
(+) Lua.;) (大多数学习库的代码是Lua,容易读取)
(+) 有很多已预定型的模型!
(-) Lua
(-) 通常需要自己编写定型代码(即插即用相对较少)
(-) 不适合递归神经网络
Caffe
Caffe 是一个广为人知、广泛应用的机器视觉库,将Matlab实现的快速卷积网络移植到了 C 和 C++ 平台上。Caffe 不适用于文本、声音或时间序列数据等其他类型的深度学习应用。与本文提到的其他一些框架相同,Caffe 选择了 Python 作为其 API。
Deeplearning4j 和 Caffe 都可以用卷积网络进行图像分类,这是最先进的技术。与 Caffe 不同,Deeplearning4j 支持任意芯片数的 GPU 并行运行,并且提供许多看似微不足道,却能使深度学习在多个并行 GPU 集群上运行得更流畅的功能。虽然在论文中被广泛引述,但 Caffe 主要用于为其 Model Zoo 网站提供已预定型的模型。Deeplearning4j 正在开发将 Caffe 模型导入 Spark 的开发解析器。
Caffe 的利与弊:
(+) 适合前馈网络和图像处理
(+) 适合微调已有的网络
(+) 定型模型而无需编写任何代码
(+) Python界面相当有用
(-) 需要用C++ / CUDA编写新的GPU层
(-) 不适合递归网络
(-) 用于大型网络(GoogLeNet、ResNet)时过于繁琐
CNTK
CNTK 是微软的开源深度学习框架。CNTK 的全称是“计算网络工具包”。此学习库包括前馈 DNN、卷积网络和递归网络。CNTK 提供基于 C++ 代码的 Python API。虽然 CNTK 遵循一个比较宽松的许可协议,却并未采用 ASF 2.0、BSD 或 MIT 等一些较为传统的许可协议。
DSSTNE、MXNet
亚马逊的深度可伸缩稀疏张量网络引擎又称 DSSTNE,是用于机器学习和深度学习建模的学习库。它是众多最新的开源深度学习库之一,在 Tensorflow 和 CNTK 之后发布。 DSSTNE 主要用 C++ 写成,速度较快,不过吸引到的用户群体规模尚不及其他学习库。
由此,亚马逊首席技术官 Werner Vogels 在上周二示,亚马逊网络服务公司(AWS)刚刚选择 MXNet 作为其最主要的深度学习框架