深度學習框架都有哪些?
非常專業(yè)的一個問題。
深度學習框架是幫助使用者進行深度學習的工具,它的出現(xiàn)降低了深度學習入門的門檻,你不需要從復雜的神經(jīng)網(wǎng)絡開始編代碼,就可以根據(jù)需要使用現(xiàn)有的模型。
做個比喻,一套深度學習框架就像是一套積木,各個組件就是某個模型或算法的一部分,使用者可以自己設計和組裝符合相關數(shù)據(jù)集需求的積木。
當然也正因如此,沒有什么框架是完美的,就像一套積木里可能沒有你需要的那一種積木,所以不同的框架適用的領域不完全一致。
深度學習的框架有很多,這里幫你羅列幾個:
CaffeCaffe是最成熟的框架之一,由Berkeley Vision and Learning Center開發(fā)。它是模塊化的,而且速度非常快,并且只需要很少的額外工作就可以支持多個GPU。它使用類似JSON的文本文件來描述網(wǎng)絡架構以及求解器方法。
此外,在一個可以下載Caffe模型以及網(wǎng)絡權重的網(wǎng)站——“model zoo”中,還可以幫助你快速地準備樣本。但是,需要注意的是,在Caffe框架中,要調(diào)整超參數(shù)比其他框架更為繁瑣,部分原因是需要為每組超參數(shù)單獨定義不同的求解器和模型文件。
▲ 使用Caffe編寫的LeNet CNN實現(xiàn)代碼示例
上圖是LeNet CNN架構的代碼片段,該模型由卷積最大池化(convolution max pooling)和激活層組成的7層卷積網(wǎng)絡構成。
Deeplearning4jDeeplearning4j是由Andrej Karpathy開發(fā)的、支持GPU的多平臺框架,它是用Java編寫的,并擁有一個Scala API。Deeplearning4j也是一個成熟的框架(用Lua編寫),在互聯(lián)網(wǎng)上有許多可以使用的樣本,并且支持多個GPU。
TensorflowTensorflow是一個由谷歌開發(fā)的、相對比較新的框架,但已經(jīng)被廣泛采用。它性能良好,支持多個GPU和CPU。Tensorflow提供了調(diào)整網(wǎng)絡和監(jiān)控性能的工具,就像Tensorboard一樣,它還有一個可用作網(wǎng)絡應用程序的教育工具。
TheanoTheano是使用符號邏輯創(chuàng)建網(wǎng)絡的框架,是以Python編寫的,但利用了numpy的高效代碼庫,從而提高了性能,超過了標準的Python。Theano在構建網(wǎng)絡方面有很大的優(yōu)勢,但是在創(chuàng)造完整的解決方案中則具有比較大的挑戰(zhàn)。Theano將機器學習中使用的梯度計算作為網(wǎng)絡創(chuàng)建的“免費”副產(chǎn)品,對于那些希望更多地關注網(wǎng)絡架構而不是梯度計算的人來說,這可能是有用的。此外,它的文本文件質(zhì)量也相當不錯。
但需要提醒大家的一點是,Theano目前已停止更新。
LasagneLasagne是用Python編寫的,建立在Theano之上的框架。它是一個相對簡單的系統(tǒng),能夠使得網(wǎng)絡構建比直接使用Theano更容易。因此,其表現(xiàn)極大地反映了Theano的潛能。
KerasKeras是用Python編寫的框架,可以作為Theano或Tensorflow的后端(如下圖)。這使得Keras在構建完整的解決方案中更容易,而且因為每一行代碼都創(chuàng)建了一個網(wǎng)絡層,所以它也更易于閱讀。此外,Keras還擁有最先進算法(優(yōu)化器(optimizers)、歸一化例程(normalization routines)、激活函數(shù)(activation functions))的最佳選擇。
需要說明的是,雖然Keras支持Theano和Tensorflow后端,但輸入數(shù)據(jù)的維度假設是不同的,因此需要仔細的設計才能使代碼支持兩個后端工作。該項目有完備的文本文件,并提供了一系列針對各種問題的實例以及訓練好了的、用于傳輸學習實現(xiàn)常用體系的結構模型。
在編寫的時候,有消息宣稱Tensorflow將采用Keras作為首選的高級包。其實,這并不奇怪,因為Keras的開發(fā)者Francois Chollet本身就是谷歌的軟件工程師。
▲ 使用Keras編寫的LeNet CNN實現(xiàn)代碼示例
MXNetMXNet是一個用C ++編寫的深度學習框架,具有多種語言綁定,并支持分布式計算,包括多GPU。它提供對低級結構以及更高級/符號級API的訪問。在性能上被認為可以與Tensorflow、Caffe等在內(nèi)的其他框架匹敵。GitHub中提供了很多關于MXNet的教程和培訓示例。
Cognitive Network Toolkit (CNTK)CNTK是由微軟開發(fā)的框架,并被描述為機器學習的“Visual Studio”。對于那些使用Visual Studio進行編程的人,這可能是一種更溫和、更有效的進入深度學習的方式。
DIGITSDIGITS是由英偉達開發(fā)的,一款基于網(wǎng)絡的深層開發(fā)工具。在很多方面,它像Caffe一樣,能夠使用文本文件而不是編程語言來描述網(wǎng)絡和參數(shù)。它具有網(wǎng)絡可視化工具,因此文本文件中的錯誤更容易被識別出來。此外,它還具有用于可視化學習過程的工具,并支持多個GPU。
TorchTorch是一款成熟的機器學習框架,是用C語言編寫的。它具有完備的文本,并且可以根據(jù)具體需要進行調(diào)整。由于是用C語言編寫的,所以Torch的性能非常好。
PyTorchPyTorch是Torch計算引擎的python前端,不僅能夠提供Torch的高性能,還能夠?qū)PU的提供更好支持。該框架的開發(fā)者表示,PyTorch與Torch的區(qū)別在于它不僅僅是封裝,而是進行了深度集成的框架,這使得PyTorc在網(wǎng)絡構建方面具有更高的靈活性。(如下圖)
▲ PyTorch代碼示例和等效方框圖
ChainerChainer與其他框架有點不同,它將網(wǎng)絡構建視為其計算的一部分。它的開發(fā)者介紹說,在這一框架中,大多數(shù)工具都是“定義然后運行”,這意味著你要定義架構,然后才能運行它。Chainer嘗試構建并優(yōu)化其架構,使其成為學習過程的一部分,或者稱之為“通過運行定義”。
其他除了上述的深度學習框架之外,還有更多的專注于具體任務的開源解決方案。例如,Nolearn專注于深度信念網(wǎng)絡(deep belief networks); Sklearn-theano提供了一個與scikit-learn(即Python中一個重要的機器學習的庫)匹配的編程語法,可以和Theano庫配合使用;Paddle則可以提供更好的自然語言處理能力……