4款深度學習框架

大雄45發表於2021-03-07


導讀 近幾年,隨著深度學習爆炸式發展,在人工智慧領域除了理論方面的突破外,還有基礎架構的突破,它們奠定了深度學習繁榮發展的基礎。這其中湧現了幾個著名的深度學習平臺,本文將對這些平臺進行逐一介紹。

4款深度學習框架4款深度學習框架

01 Theano

4款深度學習框架4款深度學習框架

Theano是在BSD許可證下發布的一個開源專案,誕生於加拿大魁北克蒙特利爾大學的LISA實驗室,是用一位希臘數學家的名字命名的。

Theano是一個Python庫,可用於定義、最佳化和計算數學表示式,特別是多維陣列(numpy.ndarray)。在解決包含大量資料的問題時,使用Theano可實現比手寫C 語言更快的程式設計速度。而透過GPU加速,Theano甚至可以比基於CPU計算的C語言快上好幾個數量級。

Theano結合了計算機代數系統(Computer Algebra System,CAS)和最佳化編譯器,還可以為多種數學運算生成定製的C語言程式碼。對於包含重複計算的複雜數學表示式任務,計算速度很重要,因此這種CAS和最佳化編譯器的組合是很有用的。

對於需要將每種不同數學表示式都計算一遍的情況,Theano能夠實現編譯/解析計算量的最小化,但仍然會給出如自動微分那樣的符號特徵。

在過去很長一段時間內,Theano是深度學習開發與研究的行業標準。而且由於誕生於學界,Theano最初是為學術研究而設計的,深度學習領域的許多學者至今仍在使用Theano。

但隨著TensorFlow在谷歌的支援下強勢崛起,Theano日漸式微,使用的人越來越少。在這個過程中標誌性事件是:Theano創始者之一Ian Goodfellow放棄Theano轉去谷歌開發TensorFlow了。

2017年9月28日,在Theano 1.0正式版釋出前夕,LISA實驗室負責人、深度學習三巨頭之一的Yoshua Bengio宣佈Theano將停止繼續開發:“Theano is Dead.”

儘管Theano正慢慢退出歷史舞臺,但作為第一個Python深度學習框架,Theano很好地完成了自己的使命,為深度學習研究人員早期拓荒提供了極大的幫助,同時也為之後深度學習框架的開發奠定了基本設計方向:以計算圖為框架的核心,採用GPU加速計算。

總結:深度學習新手可以使用Theano來練習,但對於職業開發者,建議使用其他主流深度學習框架。

02 TensorFlow

4款深度學習框架4款深度學習框架

2015年11月10日,Google宣佈推出全新的機器學習開源工具TensorFlow。TensorFlow最初是由Google機器智慧研究部門Google Brain團隊基於Google 2011年開發的深度學習基礎架構DistBelief構建的。

TensorFlow涉及大量數學運算的演算法庫,是目前使用最廣泛的機器學習工具之一。Google在大部分應用程式中都使用TensorFlow來實現機器學習。例如,我們使用Google照相或Google語音搜尋功能時,就是間接使用了TensorFlow模型,它們在大型Google硬體叢集上工作,在感知任務方面功能強大。

TensorFlow在很大程度上可以看作Theano的後繼者,不僅因為它們有很大一批共同的開發者,更是因為它們還擁有相近的設計理念——基於計算圖實現自動微分系統。

TensorFlow程式設計介面支援Python和C++。隨著1.0版本的公佈,相繼支援了Java、Go、R和Haskell API的alpha版本。此外,TensorFlow可在Google Cloud和AWS中執行。TensorFlow還支援 Windows 7、Windows 10和Windows Server 2016。

由於TensorFlow使用C++ Eigen庫,所以庫可在ARM架構上進行編譯和最佳化。這也就意味著使用者可以在各種伺服器和移動裝置上部署自己的訓練模型,無須執行單獨的模型解碼器或者載入Python直譯器。

作為當前主流的深度學習框架,TensorFlow獲得了極大的成功,但在學習過程中,讀者也需要注意如下問題。

  • 由於TensorFlow的介面一直處於快速迭代之中,並且版本之間存在不相容的問題,因此開發和除錯過程可能會出現問題(許多開原始碼無法在新版的TensorFlow上執行)。
  • 想學習TensorFlow底層執行機制的讀者需要做好心理準備,TensorFlow在GitHub程式碼倉庫的總程式碼量超過100萬行,系統設計比較複雜,因此這將是一個漫長的學習過程。
  • 在程式碼層面,面對同一個功能,TensorFlow提供了多種實現,這些實現良莠不齊,使用中還有細微的差異,請讀者注意區分。另外,TensorFlow創造了圖、會話、名稱空間、PlaceHolder等諸多抽象概念,對普通使用者來說難以理解。

總結:憑藉Google強大的推廣能力,TensorFlow已經成為當今最炙手可熱的深度學習框架,雖不完美但是最流行。目前各公司使用的框架也不統一,讀者有必要多學習幾個流行框架以作為知識儲備,TensorFlow就是一個不錯的選擇。

03 Keras

4款深度學習框架4款深度學習框架

Keras是一個高層神經網路API,由純Python編寫而成並使用TensorFlow、Theano及CNTK作為後端。Keras為支援快速實驗而生,能夠把想法迅速轉換為結果。Keras應該是深度學習框架之中最容易上手的一個,它提供了一致而簡潔的API,能夠極大地減少一般應用下使用者的工作量,避免使用者重複造輪子。

嚴格意義上講,Keras並不能算是一個深度學習框架,它更像一個構建於第三方框架之上的深度學習介面。Keras的缺點很明顯:過度封裝導致喪失靈活性。

Keras最初作為Theano的高階API,後來增加了TensorFlow和CNTK作為後端。為了遮蔽後端的差異性,提供一致的使用者介面,Keras做了層層封裝,導致使用者在新增操作或獲取底層的資料資訊時過於困難。

同時,過度封裝也使得Keras的程式執行十分緩慢,許多Bug都隱藏於封裝之中,在絕大多數場景下,Keras是本書介紹的所有框架中執行最慢的一個。

學習Keras十分容易,但是很快就會遇到瓶頸,因為它缺少靈活性。另外,在使用Keras的大多數時間裡,使用者主要是在呼叫介面,很難真正學到深度學習的內容。

總結:Keras比較適合作為深度學習框架,但是過度的封裝並不適合新手學習(無法理解深度學習的真正內涵),故不推薦。

04 PyTorch

4款深度學習框架4款深度學習框架

PyTorch是一個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的設計是“Make it complicated”,Keras的設計是“Make it complicated and hide it”,那麼PyTorch的設計真正做到了“Keep it Simple,Stupid”。

小結:深度學習框架該如何選擇?

初學者往往糾結於選擇哪個深度學習框架作為學習的開始。在這裡筆者建議初學者選擇容易上手、非過度呼叫介面的框架。另外對於初學者來說,所選框架應具備易用性強、效能佳、社群完善以及平臺支援等特點。

當今行業內各大公司使用的框架也都不盡相同,因此初學者可以考慮掌握多個框架(比如PyTorch和TensorFlow)以應對未來的職場要求。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2761601/,如需轉載,請註明出處,否則將追究法律責任。

相關文章