專欄 | 九章算法python
網址 | http://www.jiuzhang.com程序員
深度學習須要進行大量的計算,一般會涉及多層神經網絡,而且每層神經網絡中都含有大量的人工神經元,在學習過程當中進行數據的處理和傳輸。換句話說,在神經網絡的每一層,都有數以千計的人工神經元執行相同的計算。所以,神經網絡的結構使之能夠並行執行計算指令,很是適合進行與圖像處理相關的計算。面試
隨着過去幾年深度學習和人工智能領域的快速發展,咱們引入了許多的深度學習框架,建立這些深度學習框架的主要目的是但願將深度學習更有效地運用到圖像處理上。它們依賴於數據流圖的概念,按照順序執行計算。你在這些框架中所擁有的是一種與宿主語言不一樣的語言,使得數據流圖能夠並行地在圖形處理單元中優化運行。算法
在這篇文章中,我主要介紹了5個做爲深度學習發展的主力框架,它們使得數據科學家和IT工程師們更容易地經過深度學習解決複雜問題,並執行更加複雜的任務。但這5個框架也只是衆多開源框架中的滄海一粟,在深度學習領域有很是多的開源框架來幫助人們處理問題。編程
TensorFlow(Google)後端
TensorFlow 最初是由 Google Brain Team 的研究人員開發的框架,主要面向深度神經網絡和人工智能研究。自2015年末以來,該框架在 GitHub 上正式開源。TensorFlow 可以快速進行基於圖形的計算,而靈活的 TensorFlow API 則因其 GPU 支持體系結構能夠在多種設備上部署網絡模型。bash
簡而言之,TensorFlow 框架有三個主要組成部分:微信
1. TensorFlow API:使用 C++ 編寫,包括用於定義模型和進行數據訓練的 API。它有一個用戶友好的 Python 界面。
2.TensorBoard:這是一個可視化工具包,能夠用來幫助分析,可視化和調試 TensorFlow 產生的圖形。
3.TensorFlow Serving:這是一種靈活的高性能服務系統,用於在環境中部署預先訓練好的機器學習模型。也能夠用 C++ 編寫並可經過 Python 界面訪問,Serving 能夠從舊模式切換到新模式。
複製代碼
TensorFlow早已被普遍應用於學術研究和工業應用。當前用途包括:Deep Speech,RankBrain,SmartReply和計算機視覺。網絡
Keras:高級包裝架構
深度學習框架分別在兩個抽象級別上運行:
低級 - 實現數學運算和神經網絡基元(TensorFlow,Theano,PyTorch等)
高級 - 採用低級基元實現神經網絡(模型和層)
Keras 是後端庫的包裝,能夠與 TensorFlow 或 Theano 相結合,若是將 Keras 和 TensorFlow 後端結合使用,就能夠運行 TensorFlow 的代碼。Keras 提供了許多細節信息,很是適合深度學習的初學者使用。
Theano (University of Montreal)
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個抽象層次分別是:張量、變量和模塊。
Torch (NYU / Facebook)
下面咱們來談談 Torch 。它是 Facebook 的深度學習開源框架而且它的腳本語言是基於 Lua 編程語言進行編寫的。它提供了普遍的深度學習算法,並已被 Facebook,IBM,Yandex 等公司用於解決數據流的硬件問題。
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的文件中。
總而言之, Caffe 對於訓練和微調前饋分類模型很是有用。你能夠輕鬆地訓練模型而無需編寫任何代碼。它的 Python 接口很是有用,由於你能夠在不使用 Python 代碼的狀況下部署模型。它的缺陷是你須要爲每一個新的 GPU 圖層編寫核心C++代碼(在Caffe下)。所以,對於大型網絡(AlexNet,VGG,GoogLeNet,ResNet 等)的處理很是麻煩。
你應該選擇哪一種深度學習架構?
由於 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 在經歷了很長的發展時間後,仍被人們普遍運用,它更加支持大型項目並擁有更好的可擴展性。
最後的結論
上面列出的5個深度學習框架大可能是基於 python 的,可是它們只是衆多框架中性能較好的一部分。在過去的幾年,發佈了多個深度學習框架,例如:DeepLearning4j (Java), Apache’s MXNet (R, Python, Julia),Microsoft CNTK (C++, Python),和Intel’s Neon (Python)。每一個框架都有本身的特色,由於它們是不一樣的人爲了避免同的研究目的而開發的。對這些開源框架進行全面的瞭解確定會對你之後遇到的深度學習問題有所助益。當你在選擇適合本身進行編程的框架時須要注意如下幾點:易於使用(尤爲是架構和運算速度符合要求)、 GPU 支持、有訓練教程和訓練參數、神經網絡建模功能和所支持的語言。