一文读懂 | 2020年常用的深度学习框架

 

大家好, 我是Lucy@FinTech社区。

 

相信我们大多数人都对深度学习的应用惊叹道wow。为什么Deep learning这么好用?因为深度学习在填补人脑无法构建的场景方面发挥着重要作用。因此,非常合乎逻辑的是,这促成了大量深度学习框架的出现。今天这篇文章将为大家介绍2020年常用的深度学习框架,以及深度学习框架对比!

 

欢迎大家添加微信:fintech34或扫描底部微信,加入FinTech社区,攒人脉,求职招聘,提认知!

现在市面上深度学习框架有非常多,但纵观全网写深度学习框架的文章,并没有一个人能把深度学习框架孰优孰劣说明白,也没有人深度讲解每个深度学习框架在什么情景下使用可以最优。

 

 

大家在了解深度学习框架的过程中,会遇到下面这些问题:

 

1、十个主流深度学习框架都有哪些

2、每个深度学习框架都有什么特点和好处

3、深度学习框架之间都各适用于什么领域

 

今天这篇文章就用大白话给大家讲清楚深度学习框架各种干货知识,看完这篇文章,你将收获:

 

1、深度学习框架都有哪些

2、每个主流深度学习框架都有什么必须知道的特点

3、如何在某个情境下选择最适合的深度学习框架

 

不用多说了,我们开始吧。

 

01 深度学习框架的特点和好处

 

TensorFlow

谷歌的Tensorflow——可以说是当今最流行的深度学习框架。Gmail、Uber、Airbnb、Nvidia和其他许多知名品牌都在使用它。作为当今主流和头号的DL框架,在TF身上共存了受欢迎程度和高效率。

 

值得强调的特点:

 

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

  •  

TF不仅拥有了强大的计算集群,还兼顾了在iOS和Android等移动平台上运行模型的能力。

  •  

使用TF时,需要用户编写大量的代码。它不会在一夜之间自动生成给你强大的人工智能,它只是一个深入学习研究的工具。用户需要仔细考虑神经网络的结构,正确评估输入和输出数据的维数和容量。

  •  
  • TF使用静态计算图进行操作。也就是说,我们首先定义图,然后运行计算,如果需要对架构进行更改,我们将重新训练模型。TF选择这种方法是为了提高效率,但是许多现代神经网络工具能够在不显著降低学习速度的情况下,同时兼顾到在学习过程中进行改进。在这方面,TensorFlow的主要竞争对手是Pythorch。

 

TensorFlow的好处:

 

TF对于创建和试验深度学习体系结构非常方便,它的模式化也便于数据集成,例如用户可以将图形、SQL表和图像一起输入。

  •  
  • TF背后有谷歌的支持,它的开发和维护就有坚实的后盾,用户不必担心刚学会TF这个框架它就下架,因此投资时间和资源来学习它是有意义的。

 

PyTorch

Tensorflow之后深入学习的主要软件工具是PyTorch。Pythorch框架是为Facebook服务开发的,Twitter和Salesforce等公司已经将其用于自己的任务。

 

值得强调的特点:

 

  • 与TensorFlow不同,PyTorch库使用动态更新的图形进行操作。这意味着你可以在这个过程中做出改变。
  • 在PyTorch中,可以使用标准调试器,例如pdb或PyCharm。

 

PyTorch的好处:

 

  • Pytorch训练神经网络的过程简单明了。同时,Pythorch支持数据并行和分布式学习模型,并包含许多预先训练好的模型。
  • Pythorch更适合小项目和原型设计。说到跨平台解决方案,TensorFlow看起来更合适。但是,值得注意的是,对于同样的任务,用户可以使用2017年推出的Caffe2移动框架。

 

Sonnet

 

基于TensorFlow的Sonnet深度学习框架,它是由世界著名的公司DeepMind设计用来创建具有复杂体系结构的神经网络。

 

值得强调的特点:

 

  • Sonnet使用高级面向对象的库,而这一特性却也有不太好的一面:在开发神经网络(NN)或其他机器学习(ML)算法时会比较抽象,从而使模型的可解释性不高。
  • Sonnet的思想是构造对应于神经网络特定部分的主要Python对象。然后这些python对象独立地连接到TF计算图中。这种分离创建对象的过程并将它们与图关联起来简化了高层体系结构的设计。关于这些原则的更多信息可以在框架文档中找到。

 

Sonnet的好处:

 

  • Sonnet的主要优点是,你可以用它很轻松地来复现DeepMind论文中展示的研究,这比用Keras来实现更容易,因为DeepMind自己也会使用Sonnet。

总之,它是一个灵活的实用型抽象工具,它的深度学习能力绝对可以对标TF和PyTorch。

 

Keras

 

 

Keras是一个机器学习框架,如果你有大量的数据和/或你正在学习深度学习,那么它可能是你最得心应手的新朋友。不瞒你说,我的深度学习起步也是从Keras开始的。另外,使用TensorFlow、Theano或CNTK的捷径就是是高级Keras shell。

 

值得强调的特点:

  • 除了Tensorflow之外,Keras还可以作为其他流行的低级库(如Theano和CNTK)之上的高级API。
  • 在Keras中,原型制作非常方便。用户在Keras中创建大量的深度学习模型被简化为单行函数。凡事有利有弊,这种策略会使得Keras的可配置性不如底层框架。

 

Keras的好处:

 

  • 对于那些刚刚起步学习深度学习的小白来说,Keras可能是最好的深度学习框架。它是学习和复现简单概念的理想选择,小白能够通过使用Keras理解各种模型和学习过程的本质。
  • Keras是一个编写精美的API。API的功能特性可以完全帮助用户构建更多新奇复杂的应用。同时,Keras不会阻止对底层框架的访问。

 

  • Keras编写的代码更加可读和简洁。

 

  • 使用Python生成器的Keras模型序列化/反序列化API、回调和数据流已经非常成熟。

 

顺便说一句,你不能比较Keras和Tensorflow,因为它们位于不同的抽象层次上。

 

再顺便说一句:

Tensorflow位于较低级别:这是像MXNet、Theano和Pythorch这样的框架所在的位置。这是实现数学运算(如广义矩阵矩阵乘法)和神经网络原语(如卷积运算)的层次。

 

Keras在更高的水平上。在这个层次上,较低层次的原语用于实现神经网络的抽象,如层次和模型。通常,在这个级别上,还实现了其他有用的API,如模型保存和模型培训。

 

MXNet

 

 

MXNet是一个具有高度延展性的深度学习工具,可用于多种设备。尽管与TensorFlow相比,它似乎还没有得到广泛的应用,但在它成为Apache项目后,可能会促进MXNet的增长。

 

值得强调的特点:

 

  • 这个框架从一开始就支持大量的语言(C++、Python、R、Julia、JavaScript、Scala、Go,甚至Perl)。
  • 值得强调的是这个框架在多个GPU和多台机器上非常有效地并行。尤其是这一点,在Amazon Web Serices中已经得到了很好的证明。

 

MXNet的好处:

 

  • 支持多个GPU(优化计算和快速上下文切换)
  • 干净且易于维护的代码(Python、R、Scala和其他API)
  • 快速解决问题的能力(对像我这样正在深入学习的新手来说至关重要)

 

尽管MXNet没有TF那么受欢迎,但它有详细的文档,并且易于使用,能够在命令式和符号式编程风格之间进行选择,因此无论对初学者和经验丰富的工程师来说,它都是的理想选择。

 

Gluon

 

Glun是一个更伟大的深度学习框架,可以用来创建简单和复杂的模型。

 

值得强调的特点:

 

  • Gluon项目的特殊性是:它是一个灵活的交互界面,它简化了原型设计、构建和训练深度学习模型的同时而不牺牲学习速度。
  • Gluon基于MXNet,提供了一个简单的API,简化了深度学习模型的创建。
  • 与PyTorch类似,Gluon框架支持使用动态图形,并将其与高性能MXNet相结合。从这个角度来看,Gluon看起来是分布式计算Keras的一个非常有趣的替代品。

 

Gluon的好处:

 

  • 在Gluon中,用户使用简单、清晰和简洁的代码就可以定义神经网络。
  • 它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的情况下提供开发过程的灵活性。
  • Gluon能够定义动态的神经网络模型,这意味着它们可以动态构建,具有任何结构,并使用Python的任何本地控制流。

 

Swift

 

 

如果你对编程感兴趣,当你听到Swift时,你可能会想到iOS或MacOS的应用程序开发。如果你正在学习深度学习,那么你一定听说过用于Tensorflow(缩写为S4TF,Swift for Tensorflow)的Swift。

 

通过直接与通用编程语言集成,S4TF使更强大的算法得到前所未有的表达。

 

值得强调的特点:

 

  • 一流的自动差分。微分编程在通用编程语言中得到了一流的支持。使用S4TF可以获取任何函数的导数,或使自定义数据结构在任何细小处可微。
  • 新一代API。根据当今最佳实践和未来的研究方向,新的API既更易于使用,也更强大。
  • 基于TensorFlow构建的Swift API允许用户便捷地访问所有低级的TensorFlow操作符。
  • 高质量工具。在Jupyter和LLDB的基础上,Colab(Colab为谷歌开发的深度学习平台)中的Swift通过一些有用的工具(如上下文感知的自动完成)来提高用户的生产力。

 

Swift的好处:

 

  • 如果动态语言不适合你的项目,Swift是一个很好的选择。如果在训练运行数小时后出现问题,然后程序遇到类型错误,再然后程序崩溃,请选用静态类型的语言Swift。使用它,你可以在运行任何一行代码之前知道他们的类型是否是正确的。

 

Chainer

 

 

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

 

值得强调的特点:

 

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

 

Chainer的好处:

 

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

 

DL4J

 

那些对Java或Scala有编程偏好的人应或许会更喜欢DL4J(Java深度学习的缩写,Deep Learning for Java)。

 

值得强调的特点:

 

  • DL4J中的神经网络训练是通过集群迭代并行进行的。
  • 这个过程由Hadoop和Spark架构支持。
  • 使用Java允许用户在Android设备的程序开发中使用该库。

 

DL4J的好处:

 

如果你正在寻找一个好的Java深度学习框架,那么它一个非常好的平台。

 

ONNX

 

ONNX项目诞生于微软和Facebook的合作,旨在寻找一种开放的深度学习模型展示格式。ONNX简化了在不同的人工智能工作方式之间传输模型的过程。因此,ONNX允许用户兼顾各种深度学习框架的好处。

 

值得强调的特点:

 

ONNX使模型能够在一个框架中进行训练,并转移到另一个框架中进行下一步。ONNX模型目前在Caffe2、microsoft cognatic toolkit、MXNet和PyTorch中得到支持,并且还有许多其他通用框架和库的连接器。

 

ONNX的好处:

 

ONNX对PyTorch开发者来说是个好消息。但是,对于那些喜欢使用TensorFlow、Keras等的人来说,可能需要等待一段时间。

 

02深度学习框架选择建议

 

  1. 如果你是刚开始入门深度学习,想知道什么是什么,最好的选择是Keras。
  2. 出于研究目的,请选择Pythorch。
  3. 对于工业界,你可能需要根据开发环境来选择最兼容的深度学习框架。所以,对于谷歌云来说,最好的选择是TensorFlow,而对于AWS(Amazon Web Service)则最好选 MXNet和Gluon。
  4. Android开发者或许最好的选择是D4LJ。
  5. 最后,ONNX可以帮助解决不同框架之间的交互问题,可以说是万金油。

 

03总结

 

以上就是十大主流深度学习框架的解读,希望大家能够根据自己深度学习项目的特性来选择适合高效的深度学习框架以达到事半功倍的效果!

 

#今日讨论#

 

平时大家在深度学习方面遇到什么问题呢?  

欢迎留言告诉我们, 我们会请技术大牛解答哦! 

 


近期热招:(点击标题,即可了解详情)


 

1. 金融科技招聘 | 技术专场

2. 金融科技招聘 | 量化专场

3. 金融科技招聘 | 机器学习专场

4. 招聘 | 深度学习工程师(量化)-40-70万+奖金-北京-对冲基金

5.招聘 | CTO-Global Pay-金融科技-上海