- Python 深度學(xué)習(xí)
- 呂云翔 劉卓然 關(guān)捷雄等編著
- 2373字
- 2021-04-14 11:54:18
2.4 三者的比較
1.Caffe
Caffe的優(yōu)點是簡潔快速,缺點是缺少靈活性。Caffe靈活性的缺失主要是因為它的設(shè)計缺陷。在Caffe中最主要的抽象對象是層,每實現(xiàn)一個新的層,必須要用C++實現(xiàn)它的前向傳播和反向傳播代碼;如果想要新層運行在GPU上,還需要同時利用CUDA實現(xiàn)這一層的前向傳播和反向傳播。這種限制使那些不熟悉C++和CUDA的用戶擴展Caffe時感到十分困難。
Caffe憑借其易用性、簡潔明了的源碼、出眾的性能和快速的原型設(shè)計獲取了眾多用戶,曾經(jīng)占據(jù)深度學(xué)習(xí)領(lǐng)域的半壁江山。但在深度學(xué)習(xí)新時代到來之時,Caffe已經(jīng)表現(xiàn)出明顯的力不從心,諸多問題逐漸顯現(xiàn),包括靈活性缺失、擴展難、依賴眾多環(huán)境難以配置、應(yīng)用局限等。盡管在GitHub上還能找到許多基于Caffe的項目,但是新的項目已經(jīng)越來越少。
Caffe的作者從加州大學(xué)伯克利分校畢業(yè)后加入了Google,參與過TensorFlow的開發(fā),后來離開Google加入FAIR,擔(dān)任工程主管,并開發(fā)了Caffe2。Caffe2是一個兼具表現(xiàn)力、速度和模塊性的開源深度學(xué)習(xí)框架。它沿襲了大量的Caffe設(shè)計,可解決多年來在Caffe的使用和部署中發(fā)現(xiàn)的瓶頸問題。同時Caffe2的設(shè)計追求輕量級,在保有擴展性和高性能的同時,也強調(diào)了便攜性。Caffe2從一開始就以性能、擴展、移動端部署作為主要設(shè)計目標(biāo),其核心C++庫能提供速度和便攜性,而其Python和C++API使用戶可以輕松地在Linux、Windows、iOS、Android、甚至Raspberry Pi和NVIDIA Tegra上進(jìn)行原型設(shè)計、訓(xùn)練和部署。
Caffe2繼承了Caffe的優(yōu)點,在速度上令人印象深刻。Facebook人工智能實驗室與應(yīng)用機器學(xué)習(xí)團(tuán)隊合作,利用Caffe2大幅加速了機器視覺任務(wù)的模型訓(xùn)練過程,僅需1小時就可以訓(xùn)練完ImageNet這樣超大規(guī)模的數(shù)據(jù)集。然而盡管已經(jīng)發(fā)布多時,Caffe2仍然是一個不太成熟的框架,官網(wǎng)至今沒提供完整的文檔,另外安裝也比較麻煩,編譯過程時常出現(xiàn)異常,在GitHub上也很少找到相應(yīng)的代碼。
極盛時,Caffe占據(jù)了計算機視覺研究領(lǐng)域的半壁江山,雖然如今Caffe已經(jīng)很少用于學(xué)術(shù)界,但仍有不少計算機視覺相關(guān)的論文使用Caffe。由于其穩(wěn)定、出眾的性能,不少公司還在使用Caffe部署模型。Caffe2盡管做了許多改進(jìn),但是還遠(yuǎn)沒有達(dá)到替代Caffe的地步。
2.TensorFlow
TensorFlow在很大程度上可以看作Theano的后繼者,不僅因為它們有很大一批共同的開發(fā)者,而且還因為它們還擁有相近的設(shè)計理念—基于計算圖實現(xiàn)自動微分系統(tǒng)。TensorFlow使用數(shù)據(jù)流圖進(jìn)行數(shù)值計算,圖中的節(jié)點代表數(shù)學(xué)運算,而圖中的邊則代表這些節(jié)點之間傳遞的多維數(shù)組(張量)。
TensorFlow編程接口支持Python和C++。隨著1.0版本的公布,Java、Go、R和Haskell API的alpha版本也被支持。此外,TensorFlow還可在Google Cloud和AWS中運行。TensorFlow還支持Windows 7、Windows 10和Windows Server 2016操作系統(tǒng)。由于TensorFlow使用C++Eigen庫,所以庫可在ARM架構(gòu)上編譯和優(yōu)化。這也就意味著用戶可以在各種服務(wù)器和移動設(shè)備上部署自己的訓(xùn)練模型,無須執(zhí)行單獨的模型解碼器或者加載Python解釋器。
作為當(dāng)前最流行的深度學(xué)習(xí)框架,TensorFlow獲得了極大的成功,但它也有一些不足之處,總結(jié)起來主要有以下4點。
● 過于復(fù)雜的系統(tǒng)設(shè)計。TensorFlow在GitHub代碼倉庫的總代碼量超過100萬行。這么大的代碼倉庫,對于項目維護(hù)者而言是一個難以完成的任務(wù),而對讀者來說,學(xué)習(xí)TensorFlow底層運行機制更是一個極其痛苦的過程,并且大多數(shù)時候這種嘗試以放棄告終。
● 頻繁變動的接口。TensorFlow的接口一直處于快速迭代之中,并且沒有很好地考慮向后兼容性,這導(dǎo)致現(xiàn)在許多開源代碼已經(jīng)無法在新版的TensorFlow上運行,同時也間接導(dǎo)致了許多基于TensorFlow的第三方框架出現(xiàn)BUG。
● 由于接口設(shè)計過于晦澀難懂,所以在設(shè)計TensorFlow時,創(chuàng)造了圖、會話、命名空間、PlaceHolder等諸多抽象概念,對普通用戶來說難以理解。同一個功能,TensorFlow提供了多種實現(xiàn),這些實現(xiàn)良莠不齊,使用中還有細(xì)微的區(qū)別,很容易將用戶帶入坑中。
● TensorFlow作為一個復(fù)雜的系統(tǒng),文檔和教程眾多,但缺乏條理和層次,雖然查找很方便,但用戶卻很難找到一個真正循序漸進(jìn)的入門教程。
由于直接使用TensorFlow的生產(chǎn)力過于低下,包括Google官方等眾多開發(fā)者都嘗試基于TensorFlow構(gòu)建一個更易用的接口,包括Keras、Sonnet、TFLearn、TensorLayer、Slim、Fold、PrettyLayer等第三方框架每隔幾個月就會在新聞中出現(xiàn)一次,但是又大多歸于沉寂,至今TensorFlow仍沒有一個統(tǒng)一易用的接口。
縱然有缺陷,但是憑借Google著強大的推廣能力,TensorFlow仍然成為當(dāng)今最炙手可熱的深度學(xué)習(xí)框架。另外,由于Google對TensorFlow略顯嚴(yán)格的把控,目前各大公司都在開發(fā)自己的深度學(xué)習(xí)框架。
3.PyTorch
PyTorch是當(dāng)前難得的簡潔優(yōu)雅且高效快速的框架。PyTorch的設(shè)計追求最少的封裝,盡量避免重復(fù)造輪子。不像TensorFlow中充斥著session、graph、operation、name_scope、variable、tensor等全新的概念,PyTorch的設(shè)計遵循tensor→variable(autograd)→nn.Module 3個由低到高的抽象層次,分別代表高維數(shù)組(張量)、自動求導(dǎo)(變量)和神經(jīng)網(wǎng)絡(luò)(層/模塊),并且這三個抽象之間聯(lián)系緊密,可以同時進(jìn)行修改和操作。
簡潔的設(shè)計帶來的另外一個好處就是代碼易于理解。PyTorch的源碼只有TensorFlow的十分之一左右,更少的抽象、更直觀的設(shè)計使得PyTorch的源碼十分易于閱讀。
PyTorch的靈活性不以速度為代價,在許多評測中,PyTorch的速度勝過TensorFlow和Keras等框架。框架的運行速度和程序員的編碼水平有極大關(guān)系,但同樣的算法,使用PyTorch更有可能快過于其他框架。
同時,PyTorch是所有的框架中面向?qū)ο笤O(shè)計最優(yōu)雅的一個。PyTorch面向?qū)ο蟮慕涌谠O(shè)計來源于Torch,而Torch的接口設(shè)計以靈活易用著稱,Keras作者最初受Torch的啟發(fā)開發(fā)了Keras。所以PyTorch繼承了Torch的衣缽,尤其是API的設(shè)計和模塊的接口都與Torch高度一致。PyTorch的設(shè)計最符合人類的思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法,即所思即所得,不需要考慮太多關(guān)于框架本身的束縛。
PyTorch提供了完整的文檔,循序漸進(jìn)的指南,作者親自維護(hù)論壇供用戶交流和求教問題。Facebook人工智能研究院對PyTorch提供了強力支持,作為當(dāng)今排名前三的深度學(xué)習(xí)研究機構(gòu),F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新。
在PyTorch推出不到一年的時間內(nèi),各類深度學(xué)習(xí)問題都會利用PyTorch實現(xiàn)的解決方案在GitHub上開源。同時也有許多新發(fā)表的論文采用PyTorch作為工具,PyTorch正在受到越來越多人的追捧。如果說TensorFlow的設(shè)計是“Make It Complicated”、Keras的設(shè)計是“Make It Complicated And Hide It”,那么,PyTorch的設(shè)計真正做到了“Keep it Simple,Stupid”。
但由于推出時間較短,在Github上并沒有Caffe或TensorFlow那樣多的代碼實現(xiàn),使用TensorFlow能找到很多別人的代碼,而對于PyTorch的使用者,可能需要自己完成很多的代碼實現(xiàn)。
- Learning Microsoft Windows Server 2012 Dynamic Access Control
- Unreal Engine Physics Essentials
- Rake Task Management Essentials
- C語言程序設(shè)計基礎(chǔ)與實驗指導(dǎo)
- 物聯(lián)網(wǎng)系統(tǒng)開發(fā):從0到1構(gòu)建IoT平臺(第2版)
- OpenStack Cloud Computing Cookbook(Fourth Edition)
- 深入淺出Android Jetpack
- Python數(shù)據(jù)分析(第2版)
- The HTML and CSS Workshop
- 前端HTML+CSS修煉之道(視頻同步+直播)
- OpenCV 4計算機視覺項目實戰(zhàn)(原書第2版)
- Scala for Machine Learning(Second Edition)
- Visual Studio 2015高級編程(第6版)
- Hands-On JavaScript for Python Developers
- Angular應(yīng)用程序開發(fā)指南