深度學習開發必備開源框架

九章演算法發表於2018-06-15

專欄 | 九章演算法

網址 | http://www.jiuzhang.com

image

深度學習需要進行大量的計算,通常會涉及多層神經網路,並且每層神經網路中都含有大量的人工神經元,在學習過程中進行資料的處理和傳輸。換句話說,在神經網路的每一層,都有數以千計的人工神經元執行相同的計算。因此,神經網路的結構使之可以並行執行計算指令,非常適合進行與影象處理相關的計算。

隨著過去幾年深度學習和人工智慧領域的快速發展,我們引入了許多的深度學習框架,建立這些深度學習框架的主要目的是希望將深度學習更有效地運用到影象處理上。它們依賴於資料流圖的概念,按照順序執行計算。你在這些框架中所擁有的是一種與宿主語言不同的語言,使得資料流圖可以並行地在圖形處理單元中優化執行。

image

在這篇文章中,我主要介紹了5個作為深度學習發展的主力框架,它們使得資料科學家和IT工程師們更容易地通過深度學習解決複雜問題,並執行更加複雜的任務。但這5個框架也只是眾多開源框架中的滄海一粟,在深度學習領域有非常多的開源框架來幫助人們處理問題。

TensorFlow(Google)

image

TensorFlow 最初是由 Google Brain Team 的研究人員開發的框架,主要面向深度神經網路和人工智慧研究。自2015年底以來,該框架在 GitHub 上正式開源。TensorFlow 能夠快速進行基於圖形的計算,而靈活的 TensorFlow API 則因其 GPU 支援體系結構可以在多種裝置上部署網路模型。

簡而言之,TensorFlow 框架有三個主要組成部分:

1. TensorFlow API:使用 C++ 編寫,包括用於定義模型和進行資料訓練的 API。它有一個使用者友好的 Python 介面。

2.TensorBoard:這是一個視覺化工具包,可以用來幫助分析,視覺化和除錯 TensorFlow 產生的圖形。

3.TensorFlow Serving:這是一種靈活的高效能服務系統,用於在環境中部署預先訓練好的機器學習模型。也可以用 C++ 編寫並可通過 Python 介面訪問,Serving 可以從舊模式切換到新模式。
複製程式碼

image

TensorFlow早已被廣泛應用於學術研究和工業應用。當前用途包括:Deep Speech,RankBrain,SmartReply和計算機視覺。

Keras:高階包裝

深度學習框架分別在兩個抽象級別上執行:

低階 - 實現數學運算和神經網路基元(TensorFlow,Theano,PyTorch等)

高階 - 採用低階基元實現神經網路(模型和層)

Keras 是後端庫的包裝,可以與 TensorFlow 或 Theano 相結合,如果將 Keras 和 TensorFlow 後端結合使用,就可以執行 TensorFlow 的程式碼。Keras 提供了許多細節資訊,非常適合深度學習的初學者使用。

Theano (University of Montreal)

image

Theano 也是一個用於快速數值計算的 Python 庫,可以在 CPU 或 GPU 上執行。它是 Montreal 大學的 Montreal 演算法學習小組開發的一個開源專案,它的優秀特性包括: GPU 使用過程透明、與 Numpy 處理包緊密整合、具有高效的符號區分性、速度和穩定性得到優化以及存在單元測試。

遺憾的是,Youshua Bengio(MILA實驗室負責人)在2017年11月宣佈他們將不再維護或開發 Theano。原因在於 Theano 多年來推出的大部分創新技術現在已被其他框架所採用和完善。不過如果你感興趣,就可以繼續對其進行開發。

PyTorch(Facebook)

PyTorch 是一個相對較新的深度學習框架,正迅速在研究人員中流行起來。該框架由 Facebook 人工智慧研究團隊開發,用來應對來自Torch的挑戰。由於程式語言 Lua 的普及程度不高,Torch 永遠無法發展到和 Google 開發的 TensorFlow 一樣的地位。因此, PyTorch 採用了 Python 語言進行程式設計。另外,它還支援動態計算圖,對於使用時間序列和自然語言進行資料處理的研究人員具有很大的吸引力。

PyTorch 的3個抽象層次分別是:張量、變數和模組。

image

Torch (NYU / Facebook)

下面我們來談談 Torch 。它是 Facebook 的深度學習開源框架並且它的指令碼語言是基於 Lua 程式語言進行編寫的。它提供了廣泛的深度學習演算法,並已被 Facebook,IBM,Yandex 等公司用於解決資料流的硬體問題。

image
images (3).jpg

Torch 是 PyTorch 的原型,它們之間分享了許多 C 語言後端。與具有3個抽象級別的 PyTorch 不同,Torch 只有2個抽象級別:張量和模組。

Caffe(UC Berkeley)

Caffe 是一個高速、模組化的深度學習框架。它由 Berkeley 人工智慧研究小組和 Berkeley 視覺學習中心開發。雖然其核心是由 C++ 編寫的,但是與 Python 和 Matlab 繫結。這對訓練和微調前饋分類模型非常有用。雖然在研究中運用不多,但是該框架很受歡迎。

想要使用 Caffeine 訓練和微調神經網路,需要經過以下4個步驟:

1資料轉換

我們讀取資料檔案,然後進行預處理操作,並以 Caffe 可以使用的格式進行儲存。我們將編寫一個用於資料預處理和儲存的 Python 指令碼。

2模型定義

定義神經網路的結構。我們選擇一種卷積神經網路結構,並在副檔名為 .prototxt 的檔案中定義引數。

3求解器定義(Define the solver)

求解器負責模型優化。定義所有有關梯度下降的資訊。我們正在副檔名為.prototxt的配置檔案中定義求解器引數。

4模型訓練

我們通過呼叫引數來訓練模型。訓練好後,將其放入副檔名為 .caffemode l的檔案中。

image

總而言之, Caffe 對於訓練和微調前饋分類模型非常有用。你可以輕鬆地訓練模型而無需編寫任何程式碼。它的 Python 介面非常有用,因為你可以在不使用 Python 程式碼的情況下部署模型。它的缺陷是你需要為每個新的 GPU 圖層編寫核心C++程式碼(在Caffe下)。因此,對於大型網路(AlexNet,VGG,GoogLeNet,ResNet 等)的處理非常麻煩。

image

你應該選擇哪種深度學習架構?

因為 Theaterno 已不再繼續開發,Torch 由大多數人都不熟悉的程式語言 Lua 進行編寫,Caffe 更新過快等一系列原因。TensorFlow 和 PyTorch 成為大多數深度學習者的首選框架。雖然這兩個框架全部基於 Python 但是他們之間仍存在一些差異:

1. PyTorch 的介面對於初學者來說更加簡潔。程式設計部分更加直觀,不需要過多瞭解庫。但是 TensorFlow 中有許多庫的內容需要了解。

2. TensorFlow 配備了一個有許多人組成的龐大且活躍的社群。這意味著 TensorFlow 擁有比 PyTorch 更多的線上課程、程式碼教程、文件和部落格內容。

3. PyTorch 作為一個新平臺,有許多有趣的功能尚未實現。然而它在短短一年多時間內已經取得了驚人的成績。

4. TensorFlow 具有可擴充套件性,並且與分散式執行相相容。它支援從單個 GPU 到龐大系統,這些系統涉及大量的分散式強化學習,並且能夠實時進行實驗和發現錯誤。
複製程式碼

最重要的一點是, TensorFlow 可以在圖結構中定義狀態和迭代,然後執行。而 PyTorch 則是在計算過程中實時定義。換句話說, TensorFlow 使用靜態計算圖,可以更方便地部署到移動裝置,和其他體系結構,並且可以提前進行編譯。而 PyTorch 使用動態計算圖,為複雜體系結構(如動態神經網路)提供了更簡單的除錯過程和更強的處理能力。

因此,PyTorch 更適合於深度學習愛好者和小型專案的快速原型設計,尤其是涉及到跨平臺和嵌入式部署。TensorFlow 在經歷了很長的發展時間後,仍被人們廣泛運用,它更加支援大型專案並擁有更好的可擴充套件性。

image

image

最後的結論

上面列出的5個深度學習框架大多是基於 python 的,但是它們只是眾多框架中效能較好的一部分。在過去的幾年,釋出了多個深度學習框架,例如:DeepLearning4j (Java), Apache’s MXNet (R, Python, Julia),Microsoft CNTK (C++, Python),和Intel’s Neon (Python)。每個框架都有自己的特點,因為它們是不同的人為了不同的研究目的而開發的。對這些開源框架進行全面的瞭解肯定會對你以後遇到的深度學習問題有所助益。當你在選擇適合自己進行程式設計的框架時需要注意以下幾點:易於使用(尤其是架構和運算速度符合要求)、 GPU 支援、有訓練教程和訓練引數、神經網路建模功能和所支援的語言。

歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等
2d09fefd332a1a68bb1c.jpeg

相關文章