本文适合新入门小白了解深度学习框架基础,也适合刚入门选手思考各种深度学习框架。


一、深度学习框架是什么?

深度学习框架像Caffe、tensorflow,这些是深度学习的工具,简单来说就是库,编程时需要import caffe、import tensorflow。
作一个简单的比喻,一套深度学习框架就是这个品牌的一套积木,各个组件就是某个模型或算法的一部分,你可以自己设计如何使用积木去堆砌符合你数据集的积木。

二、深度学习框架有哪些?

在这里插入图片描述

谷歌:TensorFlow
Facebook:pytorch
百度:Paddle Paddle
微软:CNTK
亚马逊的AWS:MXNet
华为:mindspore
一流科技:oneflow
旷世:MegEngine
清华:Jittor


三、如何选择合适的框架?

每种框架都有其优缺点,选择的时候更加需要根据自身业务的实际需求:例如需要用到对时间序列分析的,那么就会使用循环神经网络RNN,而Caffe、MXNet虽然对图像卷积处理非常友善但缺乏循环神经网络。Google的TensorFlow支持其他机器学习算法,还支持增强学习Reinforcement learning算法。

在这里插入图片描述

1. TensorFlow

开发语言:
基于python编写,通过C/C++引擎加速,是Google开源的第二代深度学习框架。

编程语言:
Python是处理TensorFlow的最方便的客户端语言。不过,JavaScript、C++、Java、Go、C#和Julia也提供了实验性的交互界面。

优点:

  1. 处理循环神经网RNN非常友好。其用途不止于深度学习,还可以支持增强学习和其他算法。
  2. 内部实现使用了向量运算的符号图方法,使用图graph来表示计算任务,使新网络的指定变得相当容易,支持快速开发。TF使用静态计算图进行操作。也就是说,我们首先定义图,然后运行计算,如果需要对架构进行更改,我们将重新训练模型。TF选择这种方法是为了提高效率,但是许多现代神经网络工具能够在不显著降低学习速度的情况下,同时兼顾到在学习过程中进行改进。在这方面,TensorFlow的主要竞争对手是Pythorch。

缺点:

  1. 目前TensorFlow还不支持“内联(inline)”矩阵运算,必须要复制矩阵才能对其进行运算,复制庞大的矩阵会导致系统运行效率降低,并占用部分内存。
  2. TensorFlow不提供商业支持,仅为研究者提供的一种新工具,因此公司如果要商业化需要考虑开源协议问题。

2. PyTorch

开发语言:
Facebook用Lua编写的开源计算框架,支持机器学习算法。Tensorflow之后深入学习的主要软件工具是PyTorch。
Facebook于2017年1月开放了Torch的Python API ― PyTorch源代码。

优点:

  1. 具有较好的灵活性和速度。与TensorFlow不同,PyTorch库使用动态更新的图形进行操作,这意味着你可以在这个过程中做出改变。实现并优化了基本计算单元,可以很简单地在此基础上实现自己的算法,不用浪费精力在计算优化上面。
  2. 支持动态计算图,能处理长度可变的输入和输出,这尤其适用于循环神经网络RNN的应用。
  3. 在PyTorch中可以使用标准调试器,例如pdb或PyCharm。
  4. Pytorch训练神经网络的过程简单明了。
  5. Pythorch支持数据并行和分布式学习模型,并包含许多预先训练好的模型。

缺点:

  1. Pythorch更适合小项目和原型设计。说到跨平台解决方案,TensorFlow看起来更合适。但是,值得注意的是,对于同样的任务,用户可以使用2017年推出的Caffe2移动框架。

3. Caffe 1.0

开发语言:
2013年底由UC Berkely的贾扬清基于C和C++开发的深度学习框架,第一个主流的工业级深度学习工具。

优点:

  1. 具有非常出色的卷积神经网络实现,尤其在13年至16年期间大部分与视觉有关的深度学习论文都采用了caffe框架。至今为止Caffe在计算机视觉领域依然是最流行的工具包。

缺点:

  1. 由于开发早和历史遗留问题,其架构的缺点是不够灵活。
  2. 缺乏对循环网络RNN和语言建模的支持,因此Caffe不适用于文本、声音或时间序列数据等其他类型的深度学习应用。

4. Theano

开发语言:
Theano是深度学习框架中的元老,使用Python编写。Theano派生出了大量Python深度学习库,最著名的包括Blocks和Keras。

优点:

  1. 最大特点是非常的灵活,适合做学术研究的实验。
  2. 对递归网络和语言建模有较好的支持。

缺点:

  1. 速度较慢。

5. MXNet

开发语言:
MXNet主要由C/C++编写。MXNet是16年新兴的深度学习框架,因此大量借鉴了Caffe的优缺点。

编程语言:
提供多种API的机器学习框架,面向R、Python和Julia等语言,目前已被亚马逊云服务作为其深度学习的底层框架。
这个框架从一开始就支持大量的语言(C++、Python、R、Julia、JavaScript、Scala、Go,甚至Perl)。

优点:

  1. 最主要的特点是分布式机器学习通用工具包DMLC 的重要组成部分,因此其分布式能力较强。值得强调的是这个框架在多个GPU和多台机器上非常有效地并行。
  2. MXNet还注重灵活性和效率。
  3. 文档也非常的详细。
  4. 强调提高内存使用的效率,甚至能在智能手机上运行诸如图像识别等任务。
  5. 支持多个GPU(优化计算和快速上下文切换)。
  6. 干净且易于维护的代码(Python、R、Scala和其他API)。
  7. 快速解决问题的能力(对正在深入学习的新手来说至关重要)。

缺点:

  1. 与Caffe一样,缺乏对循环神经网络RNN的支持,相对比使用JAVA实现的NL4J在分布式方面没有JAVA方便。

6. Keras

Keras 是一个基于Theano和TensorFlow的深度学习库,使用TensorFlow、Theano或CNTK的捷径就是是高级Keras shell。
由于受到深度学习元老框架Torch的启发,拥有较为直观的API,有望成为未来开发神经网络的标准Python API。

优点:

  1. 除了Tensorflow之外,Keras还可以作为其他流行的低级库(如Theano和CNTK)之上的高级API。
  2. 在Keras中,原型制作非常方便。用户在Keras中创建大量的深度学习模型被简化为单行函数。凡事有利有弊,这种策略会使得Keras的可配置性不如底层框架。
  3. 对于那些刚刚起步学习深度学习的小白来说,Keras可能是最好的深度学习框架。它是学习和复现简单概念的理想选择,小白能够通过使用Keras理解各种模型和学习过程的本质。
  4. Keras是一个编写精美的API。API的功能特性可以完全帮助用户构建更多新奇复杂的应用。同时,Keras不会阻止对底层框架的访问。
  5. Keras编写的代码更加可读和简洁。
  6. 使用Python生成器的Keras模型序列化/反序列化API、回调和数据流已经非常成熟。

缺点:

  1. 灵活性低,Keras的可配置性不如底层框架。

顺便说一句:
Tensorflow位于较低级别:这是像MXNet、Theano和Pythorch这样的框架所在的位置。这是实现数学运算(如广义矩阵矩阵乘法)和神经网络原语(如卷积运算)的层次。
Keras在更高的水平上。在这个层次上,较低层次的原语用于实现神经网络的抽象,如层次和模型。通常,在这个级别上,还实现了其他有用的API,如模型保存和模型培训。

7. Chainer

在CMU的DyNet和Facebook的PyTorch出现之前,Chainer一直是动态计算图或网络的领先神经网络框架,这种网络允许输入可变长度,而这正是NLP任务的一个流行特性。

开发语言:
Chainer 的代码是在Numpy和CuPy库之上用纯Python编写的。Chainer是第一个使用动态架构模型的框架(如PyTorch)。
当用神经网络建模解决问题时,Chainer多次打破了缩放效率的记录。

优点:

  1. 根据Chainer的基准测试,Chainer明显比其他面向Python的框架更快,其中TensorFlow是包括MxNet和CNTK的测试组中速度最慢的。
  2. Chainer的GPU和GPU数据中心性能优于TensorFlow。(TensorFlow针对TPU架构进行了优化)最近,Chainer成为GPU数据中心性能的世界冠军。
  3. 类OOP编程风格。

在这里插入图片描述


四. 参考链接

https://www.zhihu.com/question/53465308
https://blog.csdn.net/yeler082/article/details/78755095
https://zhuanlan.zhihu.com/p/157310499

更多推荐