【嵌牛導讀】:由于最近在看語音識別的相關內容,看到幾個很不錯的人工智能深度學習的開源庫,分享給大家,我相信只有選擇好合適的工具,才能在開發的過程中事半功倍。
【嵌牛鼻子】:人工智能,開源框架,深度學習
一.TensorFlow
TensorFlow是一款開源的數學計算軟件,使用數據流圖(Data Flow Graph)的形式進行計算。圖中的節點代表數學運算,而圖中的線條表示多維數據數組(tensor)之間的交互。TensorFlow靈活的架構可以部署在一個或多個CPU、GPU的臺式以及服務器中,或者使用單一的API應用在移動設備中。TensorFlow最初是由研究人員和Google Brain團隊針對機器學習和深度神經網絡進行研究所開發的,目前開源之后可以在幾乎各種領域適用。
TensorFlow的特點:
機動性: TensorFlow并不只是一個規則的neural network庫,事實上如果你可以將你的計算表示成data flow graph的形式,就可以使用TensorFlow。用戶構建graph,寫內層循環代碼驅動計算,TensorFlow可以幫助裝配子圖。定義新的操作只需要寫一個Python函數,如果缺少底層的數據操作,需要寫一些C++代碼定義操作。
可適性強: 可以應用在不同設備上,cpus,gpu,移動設備,云平臺等
自動差分: TensorFlow的自動差分能力對很多基于Graph的機器學習算法有益
多種編程語言可選: TensorFlow很容易使用,有python接口和C++接口。其他語言可以使用SWIG工具使用接口。(SWIG—Simplified Wrapper and Interface Generator, 是一個非常優秀的開源工具,支持將 C/C++ 代碼與任何主流腳本語言相集成。)
最優化表現: ?充分利用硬件資源,TensorFlow可以將graph的不同計算單元分配到不同設備執行,使用TensorFlow處理副本。
二.Torch
Torch是一個有大量機器學習算法支持的科學計算框架,其誕生已經有十年之久,但是真正起勢得益于Facebook開源了大量Torch的深度學習模塊和擴展。Torch另外一個特殊之處是采用了編程語言Lua(該語言曾被用來開發視頻游戲)。
Torch的優勢:
1、構建模型簡單
2、高度模塊化
3、快速高效的GPU支持
4、通過LuaJIT接入C
5、數值優化程序等
6、可嵌入到iOS、Android和FPGA后端的接口
三.Caffe
Caffe由加州大學伯克利的PHD賈揚清開發,全稱Convolutional Architecture for Fast Feature Embedding,是一個清晰而高效的開源深度學習框架,目前由伯克利視覺學中心(Berkeley Vision and Learning Center,BVLC)進行維護。(賈揚清曾就職于MSRA、NEC、Google Brain,他也是TensorFlow的作者之一,目前任職于Facebook FAIR實驗室。)
Caffe基本流程:Caffe遵循了神經網絡的一個簡單假設——所有的計算都是以layer的形式表示的,layer做的事情就是獲得一些數據,然后輸出一些計算以后的結果。比如說卷積——就是輸入一個圖像,然后和這一層的參數(filter)做卷積,然后輸出卷積的結果。每一個層級(layer)需要做兩個計算:前向forward是從輸入計算輸出,然后反向backward是從上面給的gradient來計算相對于輸入的gradient,只要這兩個函數實現了以后,我們就可以把很多層連接成一個網絡,這個網絡做的事情就是輸入我們的數據(圖像或者語音等),然后來計算我們需要的輸出(比如說識別的標簽),在訓練的時候,我們可以根據已有的標簽來計算損失和gradient,然后用gradient來更新網絡的參數。
Caffe的優勢:
1、上手快:模型與相應優化都是以文本形式而非代碼形式給出
2、速度快:能夠運行最棒的模型與海量的數據
3、模塊化:方便擴展到新的任務和設置上
4、開放性:公開的代碼和參考模型用于再現
5、社區好:可以通過BSD-2參與開發與討論
四.Theano
2008年誕生于蒙特利爾理工學院,Theano派生出了大量深度學習Python軟件包,最著名的包括Blocks和Keras。Theano的核心是一個數學表達式的編譯器,它知道如何獲取你的結構。并使之成為一個使用numpy、高效本地庫的高效代碼,如BLAS和本地代碼(C++)在CPU或GPU上盡可能快地運行。它是為深度學習中處理大型神經網絡算法所需的計算而專門設計的,是這類庫的首創之一(發展始于2007年),被認為是深度學習研究和開發的行業標準。
Theano的優勢:
1、集成NumPy-使用numpy.ndarray
2、使用GPU加速計算-比CPU快140倍(只針對32位float類型)
3、有效的符號微分-計算一元或多元函數的導數
4、速度和穩定性優化-比如能計算很小的x的函數log(1+x)的值
5、動態地生成C代碼-更快地進行計算
6、廣泛地單元測試和自我驗證-檢測和診斷多種錯誤
7、靈活性好