黃玉萍 梁煒萱 肖祖環(huán)



摘 ?要:深度學(xué)習(xí)框架是實(shí)現(xiàn)機(jī)器學(xué)習(xí)的關(guān)鍵工具,合適的深度學(xué)習(xí)框架可以達(dá)到事半功倍的效果。為助力研究者選擇合適的框架,在回顧近十種常見(jiàn)框架的基礎(chǔ)上,聚焦當(dāng)前受眾最廣、熱度最高的兩種深度學(xué)習(xí)框架TensorFlow和PyTorch,從歷程、現(xiàn)狀、機(jī)制、訓(xùn)練模式、可視化、工業(yè)部署等角度對(duì)兩者進(jìn)行比對(duì)分析,并歸類對(duì)應(yīng)適用場(chǎng)景的建議,為框架選擇提供思路參考。
關(guān)鍵詞:深度學(xué)習(xí);TensorFlow;PyTorch;適用場(chǎng)景
中圖分類號(hào):TP181;TP391.41 ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2096-4706(2020)04-0080-04
Abstract:A deep learning framework is a key tool for implementing machine learning. A suitable deep learning framework can achieve more results with less effort. In order to help researchers choose the appropriate framework,based on reviewing nearly ten common frameworks,focus on the two deep learning frameworks (TensorFlow and PyTorch) that are currently the most widely used and most popular. From history,status,mechanism,training mode,visualization,industrial deployment and other perspectives compare and analyze the two,and categorize suggestions corresponding to applicable scenarios,providing a reference for framework selection.
Keywords:deep learning framework;TensorFlow;PyTorch;application scene
0 ?引 ?言
早在1956年就被提出的人工智能,得益于計(jì)算機(jī)網(wǎng)絡(luò)科技飛速發(fā)展帶來(lái)的數(shù)據(jù)量激增、運(yùn)算力增強(qiáng)、機(jī)器學(xué)習(xí)能力的提升,在2012年后再次成為研究熱點(diǎn),并實(shí)現(xiàn)了質(zhì)的飛躍,眾多人工智能技術(shù)在工業(yè)、安防、日常生活等領(lǐng)域的應(yīng)用,深入地改變了原有的方式,給社會(huì)的發(fā)展帶來(lái)極大的促進(jìn)作用。
人工智能的飛躍式發(fā)展與機(jī)器學(xué)習(xí)算法的進(jìn)步緊密相連,而深度學(xué)習(xí)則是實(shí)現(xiàn)機(jī)器學(xué)習(xí)的核心技術(shù)。開展深度學(xué)習(xí)相關(guān)項(xiàng)目,選擇合適的深度學(xué)習(xí)框架是相當(dāng)重要的,合適的深度學(xué)習(xí)框架可以節(jié)省很多重復(fù)的工作。當(dāng)前流行的深度學(xué)習(xí)框架主要包括TensorFlow、PyTorch、Keras、PaddlePaddle、CNTK、MXNet、DeepLearning4J、Theano、Chainer等。
本文依托廣東交通職業(yè)技術(shù)學(xué)院校內(nèi)科技項(xiàng)目,對(duì)上述流行的深度學(xué)習(xí)框架的發(fā)展、特征等進(jìn)行了歸納整理,并聚焦當(dāng)前受眾最廣、熱度最高的兩種深度學(xué)習(xí)框架—TensorFlow和PyTorch,從歷程、現(xiàn)狀、性能、特點(diǎn)等角度重點(diǎn)分析總結(jié)兩者的優(yōu)缺點(diǎn),并給出對(duì)應(yīng)的適用場(chǎng)景建議。首先歸納整理當(dāng)前流行的深度學(xué)習(xí)框架,然后重點(diǎn)聚焦TensorFlow和PyTorch之間多角度的比較分析,最后根據(jù)兩者的特征分析結(jié)果,歸類對(duì)應(yīng)適用場(chǎng)景的建議,為框架選擇提供思路參考。
1 ?深度學(xué)習(xí)框架
技術(shù)應(yīng)用的普及與技術(shù)的高效實(shí)現(xiàn)密不可分,深度學(xué)習(xí)框架通過(guò)將深度學(xué)習(xí)算法模塊化封裝,能夠?qū)崿F(xiàn)訓(xùn)練、測(cè)試、調(diào)優(yōu)模型的快速搭建,為技術(shù)應(yīng)用的預(yù)測(cè)與落地的決策提供有力支持。當(dāng)前人工智能生態(tài)的朝氣蓬勃與深度學(xué)習(xí)框架的百家齊放,可謂相輔相成,相互成就。目前主流的深度學(xué)習(xí)框架概況,具體如表1所示。
2 ?TensorFlow和PyTorch發(fā)展現(xiàn)狀
從GitHub討論熱度、各大頂級(jí)會(huì)議的選擇而言,TensorFlow和PyTorch無(wú)疑是當(dāng)前受眾最廣、熱度最高的兩種深度學(xué)習(xí)框架。
2.1 ?發(fā)展歷程
TensorFlow的前身是2011年Google Brain內(nèi)部孵化項(xiàng)目DistBelief,這是一個(gè)為深度神經(jīng)網(wǎng)絡(luò)構(gòu)建的機(jī)器學(xué)習(xí)系統(tǒng)。經(jīng)過(guò)Google內(nèi)部的錘煉后,在2015年11月9日,以Apache License 2.0的開源協(xié)議對(duì)外發(fā)布了TensorFlow,并于2017年2月發(fā)布了1.0.0版本,這標(biāo)志著TensorFlow穩(wěn)定版的誕生。2018年9月TensorFlow 1.2版本發(fā)布,將Keras融入TensorFlow,作為TensorFlow的高級(jí)API,這也標(biāo)志著TensorFlow在面向數(shù)百萬(wàn)新用戶開源的道路上邁出重要的一步。2019年9月正式發(fā)布TensorFlow 2.0版本,緊接著在11月,公布了TensorFlow 2.1的RC版本,兼容之前的流行庫(kù),并還引入了眾多新庫(kù),使得TensorFlow的功能空前強(qiáng)大。
相比較而言,PyTorch則比較年輕。2017年1月,由Face-book人工智能研究院(FAIR)基于Torch推出了PyTorch,并于2018年5月正式公布PyTorch 1.0版本,這個(gè)新的框架將PyTorch 0.4與賈揚(yáng)清的Caffe2合并,并整合ONNX格式,讓開發(fā)者可以無(wú)縫地將AI模型從研究轉(zhuǎn)到生產(chǎn),而無(wú)需處理遷移。最新版PyTorch 1.3于2019年10月上線,更新增加了很多的新特性,包括無(wú)縫移動(dòng)設(shè)備部署、量化模型以加速推斷、前端改進(jìn)(如對(duì)張量進(jìn)行命名和創(chuàng)建更干凈的代碼)等,PyTorch官方同時(shí)還開源了很多新工具和庫(kù),使得PyTorch的眾多功能向TensorFlow趨同,同時(shí)保有自身原有特性,競(jìng)爭(zhēng)力得到極大增強(qiáng)。
2.2 ?現(xiàn)狀分析
康奈爾大學(xué)的Horace He[1]以及數(shù)據(jù)科學(xué)家、Rebel Desk的COO、Medium優(yōu)秀作者Jeff Hale[2]都對(duì)TensorFlow和PyTorch在研究領(lǐng)域、工業(yè)領(lǐng)域的現(xiàn)狀進(jìn)行了分析。研究領(lǐng)域的統(tǒng)計(jì)結(jié)果主要基于五大頂級(jí)會(huì)議論文的使用率來(lái)比較趨勢(shì),工業(yè)領(lǐng)域則是通過(guò)線上招聘啟事中的提及率來(lái)比較趨勢(shì)。研究領(lǐng)域的關(guān)鍵統(tǒng)計(jì)結(jié)果展示如表2所示。
從表2我們可以發(fā)現(xiàn),在研究領(lǐng)域,PyTorch的使用率在近兩年飛速提升。69%的CVPR論文、75%以上的NAACL和ACL論文,以及50%以上的ICLR和ICML論文都選擇使用PyTorch,可謂迅速獲得研究人員的青睞,而TensorFlow則沒(méi)有如此耀眼的數(shù)據(jù)。
由圖1可知,在工業(yè)應(yīng)用領(lǐng)域,TensorFlow依然保有優(yōu)勢(shì),尤其在TensorFlow 1.2版本融合Keras作為高級(jí)獨(dú)立API之后,結(jié)合Keras的統(tǒng)計(jì)數(shù)據(jù),TensorFlow在工業(yè)領(lǐng)域的優(yōu)勢(shì)則更加明顯。TensorFlow在工業(yè)領(lǐng)域的領(lǐng)先優(yōu)勢(shì)得益于其誕生的時(shí)間較早,工業(yè)界較早引入TensorFlow框架,并已形成行業(yè)慣性,且工業(yè)界在對(duì)新事物的熱情程度遠(yuǎn)不如研究界等因素。
綜合而言,近兩年P(guān)yTorch發(fā)展勢(shì)頭強(qiáng)勁已是不爭(zhēng)事實(shí),尤其在研究領(lǐng)域迅速虜獲一批研究人員的喜愛(ài),而在工業(yè)領(lǐng)域則相對(duì)較弱。TensorFlow在研究領(lǐng)域、工業(yè)領(lǐng)域,依舊保持相對(duì)優(yōu)勢(shì),只是發(fā)展勢(shì)頭相對(duì)放緩,業(yè)務(wù)面臨被PyTorch、Keras、PaddlePaddle等分流的壓力,但就當(dāng)前現(xiàn)狀而言,并隨著TensorFlow自身的逐步完善,其占據(jù)首位的實(shí)力依舊不易撼動(dòng)。
3 ?TensorFlow和PyTorch比較分析
Pulkit Sharma[3]認(rèn)為,一個(gè)良好的深度學(xué)習(xí)框架應(yīng)該具備優(yōu)化的性能、易于理解的框架與編碼、良好的社區(qū)支持、并行化的進(jìn)程以及自動(dòng)計(jì)算梯度等特征,TensorFlow和PyTorch在這些方面都有良好的表現(xiàn),為了更為細(xì)致地比較兩者之間的差異優(yōu)勢(shì),下面將對(duì)最新版TensorFlow 2.0版本和PyTorch 1.3版本先從運(yùn)行機(jī)制、訓(xùn)練模式、可視化情況、生產(chǎn)部署等方面進(jìn)行差異比較,然后再通過(guò)細(xì)化特征進(jìn)行定性比較,最后歸類對(duì)應(yīng)適用場(chǎng)景的建議。
3.1 ?運(yùn)行機(jī)制
兩個(gè)框架都是在張量上進(jìn)行運(yùn)算,并將任意一個(gè)模型看成是有向非循環(huán)圖(DAG),但TensorFlow遵循“數(shù)據(jù)即代碼,代碼即數(shù)據(jù)”的理念,當(dāng)在TensorFlow中運(yùn)行代碼時(shí),DAG是以靜態(tài)方式定義的,若需要實(shí)現(xiàn)動(dòng)態(tài)DAG,則需要借助TensorFlow Fold庫(kù);而PyTorch屬于更Python化的框架,動(dòng)態(tài)DAG是內(nèi)置的,可以隨時(shí)定義、隨時(shí)更改、隨時(shí)執(zhí)行節(jié)點(diǎn),并且沒(méi)有特殊的會(huì)話接口或占位符,相當(dāng)靈活。此外,在調(diào)試方面,由于PyTorch中的計(jì)算圖是在運(yùn)行的時(shí)候定義的,因此使用者可以使用任何一個(gè)喜歡的調(diào)試工具,比如PDB、IPDB、PyCharm調(diào)試器或者原始的print語(yǔ)句;而TensorFlow并不能這樣,它需要借助特殊的調(diào)試工具tfdbg才能進(jìn)行調(diào)試。
3.2 ?訓(xùn)練模式
在分布式訓(xùn)練中,TensorFlow和PyTorch的一個(gè)主要差異特點(diǎn)是數(shù)據(jù)并行化,用 TensorFlow時(shí),使用者必須手動(dòng)編寫代碼,并微調(diào)要在特定設(shè)備上運(yùn)行的每個(gè)操作,以實(shí)現(xiàn)分布式訓(xùn)練;而PyTorch則是利用異步執(zhí)行的本地支持來(lái)實(shí)現(xiàn)的,其自身在分布式訓(xùn)練是比較欠缺的。
3.3 ?可視化情況
在可視化方面,TensorFlow內(nèi)置的TensorBoard庫(kù)非常強(qiáng)大,能夠顯示模型圖,繪制標(biāo)量變量,實(shí)現(xiàn)圖像、嵌入可視化,甚至是播放音頻等功能;反觀PyTorch的可視化情況,則顯得有點(diǎn)差強(qiáng)人意,開發(fā)者可以使用Visdom,但是Visdom提供的功能很簡(jiǎn)單且有限,可視化效果遠(yuǎn)遠(yuǎn)比不上TensorBoard。
3.4 ?生產(chǎn)部署
對(duì)于生產(chǎn)部署而言,TensorFlow具有絕對(duì)優(yōu)勢(shì),其可直接使用TensorFlow Serving在 TensorFlow中部署模型,而PyTorch沒(méi)有提供任何用于在網(wǎng)絡(luò)上直接部署模型的框架,需要使用Flask或者另一種替代方法來(lái)基于模型編寫一個(gè)REST API。
3.5 ?細(xì)化特征比較
為了更好地對(duì)比TensorFlow和PyTorch兩框架之間的區(qū)別與聯(lián)系,通過(guò)官網(wǎng)內(nèi)容、論壇反饋、自身實(shí)踐等多方面資源的整理,得出如表3所示的對(duì)比結(jié)果。
3.6 ?適用場(chǎng)景建議
Kirill Dubovikov[4]對(duì)兩者之間的差異進(jìn)行了總結(jié),并給出對(duì)應(yīng)的適用建議,結(jié)合GitHub、CSDN等社區(qū)、論壇相關(guān)從業(yè)人員的建議,大體可歸納為:當(dāng)需要擁有豐富的入門資源、開發(fā)大型生產(chǎn)模型、可視化要求較高、大規(guī)模分布式模型訓(xùn)練時(shí),TensorFlow或許是當(dāng)前最好的選擇;而如果想要快速上手、對(duì)于功能性需求不苛刻、追求良好的開發(fā)和調(diào)試體驗(yàn)、擅長(zhǎng)Python化的工具時(shí),PyTorch或許是值得花時(shí)間嘗試的框架。
總體而言,TensorFlow在保持原有優(yōu)勢(shì)的同時(shí)進(jìn)一步融合包括Keras在內(nèi)的優(yōu)質(zhì)資源,極大增強(qiáng)其易用性與可調(diào)試性,而PyTorch雖然年輕,但增長(zhǎng)的勢(shì)頭猛烈,并通過(guò)融合Caffe2來(lái)進(jìn)一步強(qiáng)化自身優(yōu)勢(shì)。兩者都在保留原有優(yōu)勢(shì)的同時(shí),努力補(bǔ)齊自身短板,這使得在某種程度上兩者有融合的趨勢(shì),未來(lái)哪一種框架更具優(yōu)勢(shì),現(xiàn)在定論必定過(guò)早,因此,在選擇框架時(shí),可參照上述內(nèi)容,并結(jié)合項(xiàng)目的時(shí)效、成本、維護(hù)等多方面綜合考量后再?zèng)Q定。
4 ?結(jié) ?論
當(dāng)前并沒(méi)有完美的深度學(xué)習(xí)框架,因此從眾多主流的深度學(xué)習(xí)框架中選擇適合自身項(xiàng)目的框架并非易事。通過(guò)從運(yùn)行機(jī)制、訓(xùn)練模式、可視化情況、生產(chǎn)部署以及一些細(xì)化特征的比較,我們可以發(fā)現(xiàn),TensorFlow整體而言比較成熟、穩(wěn)定且偏重于工業(yè)領(lǐng)域,適用于中大型項(xiàng)目,而較為年輕的PyTorch憑借其易用性在研究領(lǐng)域嶄露頭角,發(fā)展勢(shì)頭很猛,但仍需時(shí)日才能與TensorFlow全面抗?fàn)帲谥行⌒晚?xiàng)目中選擇PyTorch作為新的嘗試,或許會(huì)是一種很好的選擇。
參考文獻(xiàn):
[1] HE H. The State of Machine Learning Frameworks in 2019 [EB/OL].(2019-10-10).https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/.
[2] HALE J. Which Deep Learning Framework is Growing Fastest [EB/OL].(2019-04-01).https://towardsdatascience.com/which-deep-learning-framework-is-growing-fastest-3f77f14aa318.
[3] Sharma P. 5 Amazing Deep Learning Frameworks Every Data Scientist Must Know [EB/OL].(2019-03-14).https://www.analyticsvidhya.com/blog/2019/03/deep-learning-frameworks-comparison/.
[4] DUBOVIKOV K. PyTorch vs TensorFlow — Spotting the Difference [EB/OL].(2017-06-21).https://medium.com/@dubovikov.kirill/pytorch-vs-tensorflow-spotting-the-difference-25c75777377b.
[5] 段仲靜,李少波,胡建軍,等.深度學(xué)習(xí)目標(biāo)檢測(cè)方法及主流框架綜述 [J/OL].激光與光電子學(xué)進(jìn)展:1-18(2019-12-11).http://kns.cnki.net/kcms/detail/31.1690.TN.20191210.1 209.022.html.
[6] 許淑揚(yáng).深度學(xué)習(xí)框架Caffe在圖像分類中的應(yīng)用探析 [J].信息與電腦(理論版),2019,31(23):95-96.
[7] 加日拉·買買提熱衣木,常富蓉,劉晨,等.主流深度學(xué)習(xí)框架對(duì)比 [J].電子技術(shù)與軟件工程,2018(7):74.
[8] 龐濤.開源深度學(xué)習(xí)框架發(fā)展現(xiàn)狀與趨勢(shì)研究 [J].互聯(lián)網(wǎng)天地,2018(4):46-54.
[9] 李西.人工智能背景下的各大深度學(xué)習(xí)框架展望 [J].計(jì)算機(jī)產(chǎn)品與流通,2018(8):145.
[10] 51CTO.2019深度學(xué)習(xí)框架排行榜 [EB/OL].(2019-08-02).https://ai.51cto.com/art/201908/600692.htm.
[11] 阿里云云棲號(hào).關(guān)于TensorFlow你需要了解的9件事 [EB/OL].(2018-08-27).https://www.jianshu.com/p/435f9 f109b22.
[12] 燚智能物聯(lián)網(wǎng).Chainer時(shí)代即將結(jié)束 [EB/OL].(2019-12-13).http://www.openpcba.com/web/contents/get?id= 5845&tid=15.
作者簡(jiǎn)介:黃玉萍(1989-),女,漢族,江西贛州人,講師,碩士研究生,研究方向:軌道交通控制,弓網(wǎng)建模;梁煒萱(2000-),女,漢族,廣東清遠(yuǎn)人,研究方向:城市軌道交通通信信號(hào)處理;肖祖環(huán)(1998-),男,漢族,四川達(dá)州人,研究方向:城市軌道交通通信信號(hào)處理。