当前位置: 首页 > 科技观察

4款深度学习框架介绍,初学者该如何选择?

时间:2023-03-21 18:48:39 科技观察

01TheanoTheano是一个在BSD许可下发布的开源项目。它诞生于加拿大魁北克蒙特利尔大学的LISA实验室,以一位希腊数学家的名字命名。Theano是一个Python库,可用于定义、优化和评估数学表达式,尤其是多维数组(numpy.ndarray)。在解决涉及大量数据的问题时,使用Theano可以达到比手写C语言更快的编程速度。并且通过GPU加速,Theano甚至可以比基于CPU计算的C语言快几个数量级。Theano结合了计算机代数系统(ComputerAlgebraSystem,CAS)和优化编译器,还可以为各种数学运算生成定制的C语言代码。对于涉及重复计算的复杂数学表达式任务,计算速度很重要,因此这种CAS和优化编译器的结合很有用。对于每一个不同的数学表达式都需要计算的情况,Theano可以最大限度地减少编译/解析计算量,但仍然赋予自动微分等符号特性。在过去很长一段时间里,Theano一直是深度学习开发和研究的行业标准。并且由于诞生于学术界,Theano最初是为学术研究而设计的,至今仍有很多深度学习领域的学者在使用Theano。但是随着TensorFlow在谷歌的支持下强势崛起,Theano却日渐式微,使用它的人越来越少。这个过程中具有里程碑意义的事件是:Theano的创始人之一IanGoodfellow放弃了Theano,去谷歌开发TensorFlow。2017年9月28日,在Theano1.0正式发布前夕,LISA实验室负责人、深度学习三巨头之一的YoshuaBengio宣布Theano将停止继续开发:“TheanoisDead”。虽然Theano正在慢慢退出历史舞台,但作为第一个Python深度学习框架,Theano很好地完成了自己的使命,在早期开拓中为深度学习研究者提供了极大的帮助,也奠定了深度学习发展的基本设计方向。laterlearningframeworks:以计算图为框架核心,采用GPU加速计算。总结:深度学习初学者可以使用Theano进行练习,但对于专业开发者,建议使用其他主流的深度学习框架。02TensorFlow2015年11月10日,谷歌宣布推出全新的机器学习开源工具TensorFlow。TensorFlow最初由Google的机器智能研究部门GoogleBrain团队基于Google于2011年开发的深度学习基础设施DistBelief构建。TensorFlow是一个涉及大量数学运算的算法库,是目前应用最广泛的算法库之一。使用机器学习工具。谷歌在其大部分应用程序中使用TensorFlow进行机器学习。例如,当我们使用谷歌相机或谷歌语音搜索时,我们间接使用了TensorFlow模型,这些模型工作在谷歌硬件的大型集群上,对于感知任务非常强大。TensorFlow在很大程度上可以看作是Theano的继承者,不仅因为他们拥有大量共同的开发者,还因为他们也有相似的设计理念——实现基于计算图的自动微分系统。TensorFlow编程接口支持Python和C++。随着1.0版本的发布,陆续支持了Java、Go、R和HaskellAPIs的alpha版本。此外,TensorFlow在谷歌云和AWS中运行。TensorFlow还支持Windows7、Windows10和WindowsServer2016。由于TensorFlow使用C++Eigen库,因此可以在ARM架构上编译和优化该库。这也意味着用户可以在各种服务器和移动设备上部署自己的训练模型,而无需执行单独的模型解码器或加载Python解释器。作为目前主流的深度学习框架,TensorFlow取得了巨大的成功,但读者在学习过程中还需要注意以下问题。由于TensorFlow的接口一直在快速迭代,版本之间存在不兼容的问题,在开发调试过程中可能会出现问题(很多开源代码无法在新版本的TensorFlow上运行)。想要了解TensorFlow底层运行机制的读者需要做好心理准备。GitHub代码仓库中TensorFlow的总代码量超过100万行,系统设计相对复杂,所以这将是一个漫长的学习过程。在代码层面,TensorFlow为同一个功能提供了多种实现。这些实现是混合的,在使用上有细微的差别。读者应注意区分。此外,TensorFlow还创建了许多抽象的概念,例如图、会话、命名空间和PlaceHolders,普通用户很难理解这些概念。总结:凭借Google强大的推广能力,TensorFlow成为了当今最火的深度学习框架,虽然不完美,但却是最受欢迎的。目前各个公司使用的框架并不统一。读者有必要学习几个流行的框架作为知识储备。TensorFlow是一个不错的选择。03KerasKeras是一个用纯Python编写的高级神经网络API,使用TensorFlow、Theano和CNTK作为后端。Keras旨在支持快速实验,将想法快速转化为结果。Keras应该是深度学习框架中最容易上手的了。它提供了一致简洁的API,可以大大减少用户在通用应用中的工作量,避免用户重新发明轮子。严格来说,Keras并不是一个深度学习框架,它更像是一个建立在第三方框架之上的深度学习接口。Keras的缺点很明显:过多的封装导致失去了灵活性。Keras最初是作为Theano的高级API,后来添加了TensorFlow和CNTK作为后端。为了屏蔽后端的差异,提供一致的用户界面,Keras进行了层层封装,使得用户添加操作或获取底层数据信息变得非常困难。同时,过多的封装也让Keras程序执行起来非常缓慢,很多bug都隐藏在封装之中。在大多数情况下,Keras是本书介绍的所有框架中最慢的一个。学习Keras很容易,但由于缺乏灵活性,很快就会碰壁。另外,用户在使用Keras的时候,大部分时间主要是调用接口,很难真正学到深度学习的内容。总结:Keras作为深度学习框架比较适合,但是过多的封装不适合初学者(无法理解深度学习的真谛),所以不推荐。04PyTorchPyTorch是一个Python优先的深度学习框架,能够基于强大的GPU加速实现张量和动态神经网络。PyTorch是一个Python包,提供以下两个高级功能。使用强大的GPU加速Tensor计算(类似于Numpy)。基于tape框架为autograd系统构建深度神经网络。此外,PyTorch还提供了完整的官方文档、帮助用户一步步学习的用户指南,以及作者维护的供用户交流和求教的论坛。Facebook人工智能研究院FAIR为PyTorch提供了强有力的支持。作为当今世界排名前三的深度学习研究机构,FAIR的支持足以保证PyTorch得到持续的发展和更新的支持,不像很多框架是个人开发的。这只是昙花一现。如果需要,您还可以使用您最喜欢的Python包(例如Numpy、scipy和Cython)扩展PyTorch。与TensorFlow相比,PyTorch有一个显着的优势,就是它的图是动态的,而TensorFlow是静态的,不利于扩展。同时,PyTorch使用起来非常方便。总结:如果说TensorFlow的设计是“Makeitcomplicated”,Keras的设计是“Makeitcomplicatedandhideit”,那么PyTorch的设计真正做到了“KeepitSimple,Stupid”。总结:如何选择深度学习框架?初学者经常纠结于选择哪种深度学习框架作为学习的开始。在这里笔者建议初学者选择好用的框架,不要过度调用接口。另外,对于初学者来说,选择的框架应该具有易用性强、性能好、社区完整、平台支持等特点。现在业界各大公司使用的框架也各不相同,所以初学者可以考虑掌握多种框架(比如PyTorch和TensorFlow)以满足未来的职场需求。