1.TheanoTheano由加拿大魁北克蒙特利尔大学LISAGroup(现MILA)开发。它是一个在BSD许可证下发布的开源项目。它以一位希腊数学家的名字命名。Theano是一个Python库,可用于定义、优化和评估数学表达式,尤其是多维数组(numpy.ndarray)。在解决涉及大量数据的问题时,用Theano编程比用C语言编程可以获得更快的执行速度。通过GPU加速,Theano甚至可以比基于CPU的C语言快几个数量级。Theano结合了CAS(ComputerAlgebraSystem,计算机代数系统)和优化编译器,还可以为各种数学运算生成定制的C语言代码。对于处理涉及重复计算的复杂数学表达式的任务,计算速度很重要,因此这种CAS和优化编译器的结合非常有用。对于每一个不同的数学表达式都需要计算的情况,Theano可以最大限度地减少编译/解析计算量,但仍然赋予自动微分等符号特性。在过去很长一段时间里,Theano一直是深度学习开发和研究的行业标准。诞生于学术界的Theano最初是为学术研究而设计的,这使得许多深度学习领域的学者至今仍在使用Theano。但是随着TensorFlow在谷歌的支持下强势崛起,Theano却日渐式微,使用它的人越来越少。其中一个标志性事件是Theano的创始人之一IanGoodFellow放弃了Theano,转而去谷歌开发TensorFlow。2017年9月28日,在Theano1.0正式发布前夕,LISA实验室负责人、深度学习三巨头之一的YoshuaBengio宣布Theano将停止开发:“TheanoisDead”。Theano虽然会退出历史舞台,但作为第一个Python深度学习框架,它已经很好地完成了自己的使命——在早期为深度学习研究者提供了极大的帮助,也为未来的深度学习奠定了基础的设计方向。深度学习框架开发:图为框架核心,采用GPU加速计算。对于深度学习初学者,可以使用Theano进行入门练习,但对于专业开发者,推荐使用TensorFlow。2.TensorFlowTensorFlow是谷歌大脑团队基于谷歌2011年开发的深度学习基础设施DistBelief构建的。谷歌在其所有应用程序中都使用TensorFlow进行机器学习,例如间接使用TensorFlow模型的GoogleCamera和GoogleVoiceSearch。TensorFlow在很大程度上可以看作是Theano的继承者,不仅因为它们拥有大量共同的开发者,而且它们的设计理念也很相似,都实现了基于计算图的自动微分系统。TensorFlow使用数据流图执行数值计算,其中图中的节点表示数学运算,图中的边表示在这些节点之间传递的多维数组。TensorFlow编程接口支持Python和C++,TensorFlow1.0版本支持Java、Go、R和HaskellAPI的Alpha版本。此外,TensorFlow还可以运行在GoogleCloud和AWS中。TensorFlow支持Windows7、Windows10和WindowsServer2016系统。因为TensorFlow使用了C++Eigen库,所以可以在ARM架构上进行编译优化。这也意味着用户可以在各种服务器和移动设备上部署自己的训练模型,而无需执行单独的模型解码器或加载Python解释器。TensorFlow作为目前最流行的深度学习框架,取得了巨大的成功,但读者在学习过程中还需要注意以下问题。由于TensorFlow的接口不断快速迭代,版本不兼容,在开发调试过程中可能会出现问题,比如开源代码无法在新版本的TensorFlow上运行。想要了解TensorFlow底层运行机制的读者需要做好心理准备。GitHub代码仓库中TensorFlow的总代码量超过100万行,系统设计相对复杂。这将是一个漫长的学习过程。在代码层面,TensorFlow为同一个功能提供了多种实现。这些实现是混合的,在使用上有细微的差别。读者应注意选择。此外,TensorFlow还创造了很多抽象的概念,比如图、会话、命名空间、PlaceHolders等,普通用户很难理解。凭借谷歌强大的推广能力,TensorFlow成为当今最火的深度学习框架,不完美却最流行。因为各个公司使用的框架并不统一,所以我们有必要学习几个流行的框架作为知识储备。TensorFlow无疑是一个不错的选择。3.MXNetMXNet是由亚马逊首席科学家李牧带领的团队开发的深度学习框架。它具有类似于Theano和TensorFlow的数据流图,为多GPU架构提供了良好的配置,具有类似于Lasagne和Blocks的高级模型构建块。在我们需要的任何硬件(包括手机)上运行。除了支持Python之外,MXNet还提供了与R、Julia、C++、Scala、Matlab、Go和Java的接口。MXNet因其超强的分布式和内存/显存优化能力而受到开发者的欢迎。对于相同的模型,MXNet倾向于占用更少的内存和显存。在分布式环境中,MXNet表现出明显优于其他框架的可扩展性。MXNet的缺点是推广不够,接口文档不完善。虽然MXNet版本迭代很快,但是官方API文档已经很久没有更新了,导致新用户很难掌握新版本的MXNet,老用户需要查阅源码才能真正了解其用法MXNet接口。MXNet文档比较混乱,不适合初学者,但是其分发性能强大,语言支持多,更适合在云平台上使用。4.KerasKeras是一种用Python编写的高级神经网络API,使用TensorFlow、Theano和CNTK作为后端。Keras的诞生就是为了支持快速实验,能够快速实现开发者的想法。Keras是目前最容易使用的深度学习框架。它提供了一致简洁的API,可以大大减轻用户在通用应用中的工作量。与深度学习框架相比,Keras更像是一个深度学习接口,它建立在第三方框架之上。Keras的缺点很明显:过多的封装导致失去了灵活性。Keras最初是作为Theano的高级API,后来添加了TensorFlow和CNTK作为后端。为了屏蔽后端的差异,Keras提供了一致的用户界面,并层层封装,使得用户添加操作或获取底层数据信息变得过于困难。同时,过多的封装也使得Keras程序运行起来非常缓慢,很多bug都隐藏在封装之中。在大多数情况下,Keras是本文介绍的所有框架中最慢的。学习Keras很容易,但是你很快就会遇到瓶颈,因为它不够灵活。另外,用户在使用Keras的时候,大部分时间主要是调用接口,很难真正学到深度学习的内容。Keras的过度封装使其不适合初学者学习(无法理解深度学习的真正内涵),因此不推荐使用。5.PyTorchPyTorch是一个Python优先的深度学习框架,可以基于强大的GPU加速实现张量和动态神经网络。PyTorch提供完整的文档和分步用户指南。作者亲自维护PyTorch论坛,方便用户交流和解决问题。Facebook人工智能研究院FAIR为PyTorch的推广提供了强有力的支持。作为当今排名前三的深度学习研究机构,FAIR的支持足以保证PyTorch不断发展更新,不会像一些个人开发的框架那样昙花一现。如果需要,我们还可以使用NumPy、SciPy和Cython等Python包扩展PyTorch。与TensorFlow相比,PyTorch的优势之一是它的图是动态的,而TensorFlow框架是静态图,不利于扩展。同时,PyTorch非常简洁易用。本书选择PyTorch作为主要实现框架。如果说TensorFlow的设计是“Makeitcomplicated”,Keras的设计是“Makeitcomplicatedandhideit”,那么PyTorch的设计真正做到了“Keepitsimple,stupid”。6.CaffeCaffe是一个基于C++编写的深度学习框架。作者是贾扬清。源代码是开放的(使用许可的BSD),它提供命令行工具以及Matlab和Python界面。Caffe一直是深度学习研究人员使用的框架。许多研究人员对其进行了开发和优化,因此积累了很多。因此,Caffe也是目前流行的深度学习框架之一。尽管如此,Caffe也存在不支持多机、跨平台、扩展性差等问题。初学者使用Caffe还需要注意以下两个问题。Caffe的安装过程需要大量的依赖库,因此涉及到很多安装版本问题,初学者一定要多加注意。当用户想要实现一个新层时,需要用C++实现它的前向传播和反向传播代码,而如果想要新层在GPU上运行,则需要使用CUDA来实现前向传播和反向传播代码这一层同时。反向传播。Caffe2来自Facebook人工智能实验室和应用机器学习团队,贾扬清仍然是主要贡献者之一。Caffe2在工程上做了很多优化,比如运行速度、跨平台、可扩展性等,可以看作是对Caffe更细粒度的重构,但在设计上,Caffe2其实更像TensorFlow.Caffe2代码目前是开源的。工业界和学术界仍然有很多人在使用Caffe,Caffe2的出现为我们提供了更多的选择。作者简介:涂明,资深数据架构师、人工智能技术专家,目前就职于腾讯,曾就职于阿里。对大数据、自然语言处理、图像识别、Python、Java等相关技术有深入研究,积累了丰富的实践经验。金智勇,计算机视觉算法专家,在计算机视觉领域耕耘12年。目前就职于百度,曾任职于阿里、三星等知名高科技企业。业务领域涵盖增强现实、人脸识别、图像美化、智能交通、工业质检等方向,具有丰富的算法研究和实施经验。本文节选自《深度学习与目标检测:工具、原理与算法》,经发布者授权发布。(书号:9787111690344)
