最热深度学习框架TensorFlow和PyTorch,哪一款才是你的菜

前言

人工智能的飞跃式发展与机器学习算法的进步紧密相连,而深度学习则是实现机器学习的核心技术。开展深度学习相关项目,选择合适的深度学习框架是相当重要的,合适的深度学习框架可以节省很多重复的工作。

值得注意的是,当前并没有完美的深度学习框架,因此从众多主流的深度学习框架中选择适合自身项目的框架并非易事。为助力大家选择合适的框架,本文在回顾近十种常见框架的基础上,聚焦当前受众最广、热度最高的两种深度学习框架TensorFlow和PyTorch。让大家对这种深度学习框架有一个全面清晰地了解。

 

深度学习框架的概览

技术应用的普及与技术的高效实现密不可分,深度学习框架通过将深度学习算法模块化封装,能够实现训练、测试、调优模型的快速搭建,为技术应用的预测与落地的决策提供有力支持。当前人工智能生态的朝气蓬勃与深度学习框架的百家齐放,可谓相辅相成,相互成就。

当前流行的深度学习框架主要包括TensorFlow、PyTorch、Keras、PaddlePaddle、CNTK、MXNet、DeepLearning4J、Theano、Chainer等,具体如下表所示。

 

最热深度学习框架TensorFlow和PyTorch,哪一款才是你的菜_第1张图片

TensorFlow和PyTorch发展历程

TensorFlow的前身是2011年GoogleBrain内部孵化项目DistBelief,这是一个为深度神经网络构建的机器学习系统。经过Google内部的锤炼后,在2015年11月9日,以ApacheLicense2.0的开源协议对外发布了TensorFlow,并于2017年2月发布了1.0.0版本,这标志着TensorFlow稳定版的诞生。2018年9月TensorFlow1.2版本发布,将Keras融入TensorFlow,作为TensorFlow的高级API,这也标志着TensorFlow在面向数百万新用户开源的道路上迈出重要的一步。2019年9月正式发布TensorFlow2.0 版本,紧接着在11月,公布了TensorFlow2.1 的RC版本,兼容之前的流行库,并还引入了众多新库,使得TensorFlow的功能空前强大。

相比较而言,PyTorch则比较年轻。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,并于2018年5月正式公布PyTorch1.0 版本,这个新的框架将PyTorch0.4 与贾扬清的Caffe2合并,并整合ONNX格式,让开发者可以无缝地将AI模型从研究转到生产,而无需处理迁移。最新版PyTorch1.3 于2019年10月上线,更新增加了很多的新特性,包括无缝移动设备部署、量化模型以加速推断、前端改进(如对张量进行命名和创建更干净的代码)等,PyTorch官方同时还开源了很多新工具和库,使得PyTorch的众多功能向TensorFlow趋同,同时保有自身原有特性,竞争力得到极大增强。

 

TensorFlow和PyTorch比较分析

一个良好的深度学习框架应该具备优化的性能、易于理解的框架与编码、良好的社区支持、并行化的进程以及自动计算梯度等特征,TensorFlow和PyTorch在这些方面都有良好的表现,为了更为细致地比较两者之间的差异优势,下面将对最新版TensorFlow2.0 版本和PyTorch1.3 版本先从运行机制、训练模式、可视化情况、生产部署等方面进行差异比较,然后再通过细化特征进行定性比较,最后归类对应适用场景的建议。

 

运行机制

两个框架都是使用张量进行运算,并将任意一个模型看成是有向非循环图(DAG),但TensorFlow遵循“数据即代码,代码即数据”的理念,当在TensorFlow中运行代码时,DAG是以静态方式定义的,若需要实现动态DAG,则需要借助TensorFlowFold 库;而PyTorch属于更Python化的框架,动态DAG是内置的,可以随时定义、随时更改、随时执行节点,并且没有特殊的会话接口或占位符,相当灵活。此外,在调试方面,由于PyTorch中的计算图是在运行的时候定义的,因此使用者可以使用任何一个喜欢的调试工具,比如PDB、IPDB、PyCharm调试器或者原始的print语句;而TensorFlow并不能这样,它需要借助特殊的调试工具tfdbg才能进行调试。

训练模式

在分布式训练中,TensorFlow和PyTorch的一个主要差异特点是数据并行化,用TensorFlow时,使用者必须手动编写代码,并微调要在特定设备上运行的每个操作,以实现分布式训练;而PyTorch则是利用异步执行的本地支持来实现的,其自身在分布式训练是比较欠缺的。

可视化情况

在可视化方面,TensorFlow内置的TensorBoard库非常强大,能够显示模型图,绘制标量变量,实现图像、嵌入可视化,甚至是播放音频等功能;反观PyTorch的可视化情况,则显得有点差强人意,开发者可以使用Visdom,但是Visdom提供的功能很简单且有限,可视化效果远远比不上TensorBoard。

生产部署

对于生产部署而言,TensorFlow具有绝对优势,其可直接使用TensorFlowServing 在TensorFlow中部署模型,而PyTorch没有提供任何用于在网络上直接部署模型的框架,需要使用Flask或者另一种替代方法来基于模型编写一个RESTAPI。

细化特征比较

为了更好地对比TensorFlow和PyTorch两框架之间的区别与联系,通过官网内容、论坛反馈、自身实践等多方面资源的整理,得出如表3所示的对比结果。

适用场景建议

当需要拥有丰富的入门资源、开发大型生产模型、可视化要求较高、大规模分布式模型训练时,TensorFlow或许是当前最好的选择;而如果想要快速上手、对于功能性需求不苛刻、追求良好的开发和调试体验、擅长Python化的工具时,PyTorch或许是值得花时间尝试的框架。总体而言,TensorFlow在保持原有优势的同时进一步融合包括Keras在内的优质资源,极大增强其易用性与可调试性,而PyTorch虽然年轻,但增长的势头猛烈,并通过融合Caffe2来进一步强化自身优势。两者都在保留原有优势的同时,努力补齐自身短板,这使得在某种程度上两者有融合的趋势,未来哪一种框架更具优势,现在定论必定过早,因此,在选择框架时,可参照上述内容,并结合项目的时效、成本、维护等多方面综合考量后再决定。

 

结语

当前并没有完美的深度学习框架,因此从众多主流的深度学习框架中选择适合自身项目的框架并非易事。通过从运行机制、训练模式、可视化情况、生产部署以及一些细化特征的比较,我们可以发现,TensorFlow整体而言比较成熟、稳定且偏重于工业领域,适用于中大型项目,而较为年轻的PyTorch凭借其易用性在研究领域崭露头角,发展势头很猛,但仍需时日才能与TensorFlow全面抗争,在中小型项目中选择PyTorch作为新的尝试,或许会是一种很好的选择。

你可能感兴趣的:(深度学习,机器学习,TensorFlow,PyTorch)