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