博客專欄

EEPW首頁(yè) > 博客 > 原創(chuàng) | 讓你捷足先登的深度學(xué)習(xí)框架

原創(chuàng) | 讓你捷足先登的深度學(xué)習(xí)框架

發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2023-01-19 來(lái)源:工程師 發(fā)布文章

對(duì)于據(jù)科學(xué)的初學(xué)者來(lái)說(shuō),利用開(kāi)源的深度學(xué)習(xí)框架,可以大幅度簡(jiǎn)化復(fù)雜的大規(guī)模度學(xué)習(xí)模型的實(shí)現(xiàn)過(guò)程。在深度學(xué)習(xí)框架下構(gòu)建模型,無(wú)需花費(fèi)幾天或幾周的時(shí)間從頭開(kāi)始編寫代碼,便可以輕松實(shí)現(xiàn)諸如卷積神經(jīng)網(wǎng)絡(luò)這樣復(fù)雜的模型。在本文中,將介紹幾種非常有用的深度學(xué)習(xí)框架、它們的優(yōu)點(diǎn)以及應(yīng)用,通過(guò)對(duì)每個(gè)框架進(jìn)行比較,研發(fā)人員了解如何有選擇地使用它們,高效快捷完成項(xiàng)目任務(wù)。


1. 深度學(xué)習(xí)框架概述


深度學(xué)習(xí)框架是一種界面、庫(kù)或工具,它使編程人員在無(wú)需深入了解底層算法的細(xì)節(jié)的情況下,能夠更容易、更快速地構(gòu)建深度學(xué)習(xí)模型。深度學(xué)習(xí)框架利用預(yù)先構(gòu)建和優(yōu)化好的組件集合定義模型,為模型的實(shí)現(xiàn)提供了一種清晰而簡(jiǎn)潔的方法。


利用恰當(dāng)?shù)目蚣芸梢钥焖贅?gòu)建模型,而無(wú)需編寫數(shù)百行代碼,一個(gè)良好的深度學(xué)習(xí)框架具備以下關(guān)鍵特征:


  • 優(yōu)化的性能

  • 易于理解和編碼

  • 良好的社區(qū)支持,

  • 并行化的進(jìn)程,以減少計(jì)算

  • 自動(dòng)計(jì)算梯度


這五點(diǎn)也是用來(lái)挑選五大頂級(jí)深度學(xué)習(xí)框架的首選標(biāo)準(zhǔn)。


2. PyTorch


PyTorch是Torch深度學(xué)習(xí)框架的一個(gè)接口,可用于建立深度神經(jīng)網(wǎng)絡(luò)和執(zhí)行張量計(jì)算。Torch是一個(gè)基于Lua的框架,而PyTorch則運(yùn)行在Python上。


PyTorch是一個(gè)Python包,它提供張量計(jì)算。張量是多維數(shù)組,就像numpy的ndarray一樣,它也可以在GPU上運(yùn)行。PyTorch使用動(dòng)態(tài)計(jì)算圖,PyTorch的Autograd軟件包從張量生成計(jì)算圖,并自動(dòng)計(jì)算梯度。


與特定功能的預(yù)定義的圖表不同,PyTorch提供了一個(gè)框架,用于在運(yùn)行時(shí)構(gòu)建計(jì)算圖形,甚至在運(yùn)行時(shí)也可以對(duì)這些圖形進(jìn)行更改。當(dāng)不知道創(chuàng)建神經(jīng)網(wǎng)絡(luò)需要多少內(nèi)存的情況下,這個(gè)功能便很有價(jià)值。


PyTorch靈活性大,可以使用PyTorch處理各種深度學(xué)習(xí)的任務(wù),包括但不局限于:


  • 影像(檢測(cè)、分類等)

  • 文本(自然語(yǔ)言學(xué)習(xí))

  • 增強(qiáng)學(xué)習(xí)


3. JAX


谷歌最新推出的JAX,官方定義為CPU、GPU和TPU上的NumPy。它具有出色的自動(dòng)微分(differentiation)功能,是可用于高性能機(jī)器學(xué)習(xí)研究的python庫(kù)。Numpy在科學(xué)計(jì)算領(lǐng)域十分普及,但是在深度學(xué)習(xí)領(lǐng)域,由于它不支持自動(dòng)微分和GPU加速,所以更多的是使用Tensorflow或Pytorch這樣的深度學(xué)習(xí)框架。


JAX使用 XLA 在諸如GPU和TPU的加速器上編譯和運(yùn)行NumPy。它與 NumPy API 非常相似, numpy 完成的事情幾乎都可以用 jax.numpy 完成。


XLA是TensorFlow底層做JIT編譯優(yōu)化的工具,XLA可以對(duì)計(jì)算圖做算子Fusion,將多個(gè)GPU Kernel合并成少量的GPU Kernel,用以減少調(diào)用次數(shù),可以大量節(jié)省GPU Memory IO時(shí)間。Jax本身并沒(méi)有重新做執(zhí)行引擎層面的東西,而是直接復(fù)用TensorFlow中的XLA Backend進(jìn)行靜態(tài)編譯,以此實(shí)現(xiàn)加速。


JAX在偏微分方程求解問(wèn)題上的表現(xiàn)尤為突出,研究人員試了試分別在PyTorch和JAX兩種框架上運(yùn)行幾種預(yù)訓(xùn)練模型,發(fā)現(xiàn)JAX的速度大約是PyTorch的6倍。JAX在以分子動(dòng)力學(xué)為代表的科學(xué)計(jì)算領(lǐng)域的巨大潛力。


4. TensorFlow


TensorFlow由谷歌大腦團(tuán)隊(duì)的研究人員和工程師研發(fā),它是深度學(xué)習(xí)領(lǐng)域中最常用的框架。


TensorFlow之所以流行的原因有兩點(diǎn):首先,它是完全開(kāi)源的,并且有出色的社區(qū)支持。TensorFlow為大多數(shù)復(fù)雜的深度學(xué)習(xí)模型預(yù)先編寫好了代碼,比如遞歸神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò),其次,它支持多種語(yǔ)言來(lái)創(chuàng)建深度學(xué)習(xí)模型,比如Python語(yǔ)言、C語(yǔ)言和R語(yǔ)言等,并且有不錯(cuò)的文檔和指南支持。


TensorFlow有許多組件,其中最為突出的是:


  • Tensorboard:幫助使用數(shù)據(jù)流圖進(jìn)行有效的數(shù)據(jù)可視化;

  • TensorFlow:用于快速部署新算法/試驗(yàn)。


TensorFlow的架構(gòu)靈活,能夠在一個(gè)或多個(gè)CPU(以及GPU)上部署深度學(xué)習(xí)模型,典行的TensorFlow應(yīng)用場(chǎng)景如下:


  • 基于文本的應(yīng)用:語(yǔ)言檢測(cè)、文本摘要

  • 圖像識(shí)別:圖像字幕、人臉識(shí)別、目標(biāo)檢測(cè)

  • 聲音識(shí)別

  • 時(shí)間序列分析

  • 視頻分析


5. Keras


Keras用Python編寫,可以在TensorFlow(以及CNTK和Theano)之上運(yùn)行。TensorFlow的接口是一個(gè)低級(jí)庫(kù),新用戶可能會(huì)很難理解某些實(shí)現(xiàn)。


而Keras是一個(gè)高層的API,它為快速實(shí)驗(yàn)而開(kāi)發(fā)。因此,如果希望獲得快速結(jié)果,Keras會(huì)自動(dòng)處理核心任務(wù)并生成輸出。Keras支持卷積神經(jīng)網(wǎng)絡(luò)和遞歸神經(jīng)網(wǎng)絡(luò),可以在CPU和GPU上無(wú)縫運(yùn)行。


深度學(xué)習(xí)的初學(xué)者經(jīng)常會(huì)抱怨:無(wú)法正確理解復(fù)雜的模型。如果你是這樣的用戶,Keras便是正確選擇!它的目標(biāo)是最小化用戶操作,并使其模型真正容易理解。


Keras有多種架構(gòu),用于解決各種各樣的問(wèn)題,其中最為典型的應(yīng)用是圖像分類!


6. Caffe


CAFE是另一個(gè)面向圖像處理領(lǐng)域的、比較流行的深度學(xué)習(xí)框架,它是由賈陽(yáng)青(Yangqing Jia)在加利福尼亞伯克利大學(xué)讀博士期間開(kāi)發(fā)的,它也是開(kāi)源的!


雖然Caffe對(duì)遞歸網(wǎng)絡(luò)和語(yǔ)言建模的支持不如前面所述的幾個(gè)框架。但是Caffe最突出的優(yōu)點(diǎn)是:只需單個(gè)NVIDIA K40 GPU,它便可以每天處理超過(guò)六千萬(wàn)張圖像,其中 1毫秒/圖像用于推理,4毫秒/圖像用于學(xué)習(xí)。


它為C、Python、MATLAB等接口以及傳統(tǒng)的命令行提供了支持。


通過(guò)Caffe Model Zoo框架可訪問(wèn)用于解決深度學(xué)習(xí)問(wèn)題的預(yù)訓(xùn)練網(wǎng)絡(luò)、模型和權(quán)重。這些模型可完成下述任務(wù):


1) 簡(jiǎn)單的遞歸

2) 大規(guī)模視覺(jué)分類

3) 用于圖像相似性的SiameSE網(wǎng)絡(luò)

4) 語(yǔ)音和機(jī)器人應(yīng)用


7. Deeplearning4j


對(duì)于Java程序員來(lái)說(shuō),Deeplearning4j理想的深度學(xué)習(xí)框架!


Deeplearning4j用Java實(shí)現(xiàn),與Python相比效率更高。它使用稱為ND4J的張量庫(kù),提供了處理n維數(shù)組(也稱為張量)的能力。該框架還支持CPU和GPU。


Deeplearning4j將加載數(shù)據(jù)和訓(xùn)練算法的任務(wù)作為單獨(dú)的過(guò)程處理,這種功能分離提供了很大的靈活性。這成為了它的突出優(yōu)點(diǎn)。!


Deeplearning4j適用于圖像、CSV 和純文本等不同的數(shù)據(jù)類型。


可以使用Deeplearning4j構(gòu)建的深度學(xué)習(xí)模型有:


1) 卷積神經(jīng)網(wǎng)絡(luò)(CNNs)

2) 遞歸神經(jīng)網(wǎng)絡(luò)(RNNs)

3) 長(zhǎng)短時(shí)記憶(LSTM)等多種結(jié)構(gòu).


8. 深度學(xué)習(xí)框架之間的對(duì)比


上面已經(jīng)討論了六種較為流行的深度學(xué)習(xí)框架,每一種都獨(dú)具特性,那么數(shù)據(jù)科學(xué)家會(huì)從中如何做出選擇?


當(dāng)接到一個(gè)新的項(xiàng)目時(shí),如何決定采用哪個(gè)框架?為此,需要了解每個(gè)框架的優(yōu)點(diǎn)和局限性。如果選對(duì)了正確的框架,會(huì)起到事半功倍的效果。某些框架在處理圖像數(shù)據(jù)時(shí)工作得非常好,但無(wú)法解析文本數(shù)據(jù);某些框架在處理圖像和文本數(shù)據(jù)時(shí),性能很好,但是它們的內(nèi)部工作原理很難理解。


在本節(jié)中,使用以下標(biāo)準(zhǔn)比較上述深度學(xué)習(xí)框架:


1) 社區(qū)支持力度

2) 使用的語(yǔ)言

3) 接口

4) 對(duì)預(yù)訓(xùn)練的模型的支持


所有這些框架都是開(kāi)源的,支持CUDA,并有預(yù)訓(xùn)練的模型。但是,應(yīng)該如何正確開(kāi)始,應(yīng)該選擇哪個(gè)框架來(lái)構(gòu)建(初始)深度學(xué)習(xí)模型?讓我們來(lái)做詳細(xì)的討論!


先來(lái)說(shuō)說(shuō)TensortFlow。TensorFlow能處理圖像以及基于序列的數(shù)據(jù),如果你是深度學(xué)習(xí)的初學(xué)者,或者對(duì)線性代數(shù)和微積分等數(shù)學(xué)概念沒(méi)有堅(jiān)實(shí)的基礎(chǔ),那么TensortFlow的學(xué)習(xí)曲線將會(huì)十分陡峭。對(duì)于剛起步的人來(lái)說(shuō),TensorFlow可能過(guò)于復(fù)雜。建議需要不斷練習(xí),不斷探索社區(qū),并繼續(xù)閱讀文章以掌握TensorFlow的訣竅。一旦對(duì)這個(gè)框架有了一個(gè)很好的理解,實(shí)現(xiàn)一個(gè)深度學(xué)習(xí)模型對(duì)你來(lái)說(shuō)將是易如反掌。


Keras是一個(gè)非常堅(jiān)實(shí)的框架,可以開(kāi)啟深度學(xué)習(xí)之旅。如果你熟悉Python,并且沒(méi)有進(jìn)行一些高級(jí)研究或開(kāi)發(fā)某種特殊的神經(jīng)網(wǎng)絡(luò),那么Keras適合你。如果有一個(gè)與圖像分類或序列模型相關(guān)的項(xiàng)目,可以從Keras開(kāi)始,很快便可以構(gòu)建出一個(gè)工作模型。Keras也集成在TensorFlow中,因此也可以使用tf.keras.構(gòu)建模型。


在圖像數(shù)據(jù)上構(gòu)建深度學(xué)習(xí)模型時(shí),Caffe是不錯(cuò)的選擇。但是,當(dāng)用到遞歸神經(jīng)網(wǎng)絡(luò)和語(yǔ)言模型時(shí),Caffe落后于其他框架。Caffe的主要優(yōu)點(diǎn)是,即使沒(méi)有強(qiáng)大的機(jī)器學(xué)習(xí)或微積分知識(shí),也可以構(gòu)建出深度學(xué)習(xí)模型。Caffe主要用于建立和部署移動(dòng)電話和其他計(jì)算受限平臺(tái)的深度學(xué)習(xí)模型。


正如前文所述,DeepleEarning4J是Java程序員的天堂,它為CNNS、RNN和LSTMS等不同的神經(jīng)網(wǎng)絡(luò)提供了大量的支持,在不犧牲速度的情況下它可以處理大量數(shù)據(jù)。



*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞: AI

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉