當(dāng)前位置:首頁 > 智能硬件 > 人工智能AI
[導(dǎo)讀] 深度學(xué)習(xí)需要大量的計算。它通常包含具有許多節(jié)點的神經(jīng)網(wǎng)絡(luò),并且每個節(jié)點都有許多需要在學(xué)習(xí)過程中必須不斷更新的連接。換句話說,神經(jīng)網(wǎng)絡(luò)的每一層都有成百上千個相同的人工神經(jīng)元在執(zhí)行相同的計算。因此,

深度學(xué)習(xí)需要大量的計算。它通常包含具有許多節(jié)點的神經(jīng)網(wǎng)絡(luò),并且每個節(jié)點都有許多需要在學(xué)習(xí)過程中必須不斷更新的連接。換句話說,神經(jīng)網(wǎng)絡(luò)的每一層都有成百上千個相同的人工神經(jīng)元在執(zhí)行相同的計算。因此,神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)適用于GPU(圖形處理單元)可以高效執(zhí)行的計算類型(GPU是專門為并行計算相同指令而設(shè)計的)。

隨著深度學(xué)習(xí)和人工智能在過去幾年的迅速發(fā)展,我們也看到了許多深度學(xué)習(xí)框架的引入。深度學(xué)習(xí)框架的創(chuàng)建目標(biāo)是在GPU上高效運行深度學(xué)習(xí)系統(tǒng)。這些深度學(xué)習(xí)框架都依賴于計算圖的概念,計算圖定義了需要執(zhí)行的計算順序。在這些框架中你使用的是一種可以建立計算圖的語言,并且語言的執(zhí)行機(jī)制與其宿主語言本身的機(jī)制有所不同。然后,計算圖可以并行地在目標(biāo)GPU中優(yōu)化和運行。

在這篇文章中,我想向大家介紹推動深度學(xué)習(xí)發(fā)展的5個主力框架。這些框架使數(shù)據(jù)科學(xué)家和工程師更容易為復(fù)雜問題構(gòu)建深度學(xué)習(xí)解決方案,并執(zhí)行更復(fù)雜的任務(wù)。這只是眾多開源框架中的一小部分,由不同的科技巨頭支持,并相互推動更快創(chuàng)新。

1. TensorFlow (Google)

TensorFlow最初是由Google Brain Team的研究人員和工程師開發(fā)的。其目的是面向深度神經(jīng)網(wǎng)絡(luò)和機(jī)器智能研究。自2015年底以來,TensorFlow的庫已正式在GitHub上開源。TensorFlow對于快速執(zhí)行基于圖形的計算非常有用。靈活的TensorFlow API可以通過其GPU支持的架構(gòu)在多個設(shè)備之間部署模型。

簡而言之,TensorFlow生態(tài)系統(tǒng)有三個主要組成部分:

用C ++編寫的TensorFlow API包含用于定義模型和使用數(shù)據(jù)訓(xùn)練模型的API。 它也有一個用戶友好的Python接口。

TensorBoard是一個可視化工具包,可幫助分析,可視化和調(diào)試TensorFlow計算圖。

TensorFlow Serving是一種靈活的高性能服務(wù)系統(tǒng),用于在生產(chǎn)環(huán)境中部署預(yù)先訓(xùn)練好的機(jī)器學(xué)習(xí)模型。Serving也是由C ++編寫并可通過Python接口訪問,可以即時從舊模式切換到新模式。

TensorFlow已被廣泛應(yīng)用于學(xué)術(shù)研究和工業(yè)應(yīng)用。一些值得注意的當(dāng)前用途包括Deep Speech,RankBrain,SmartReply和On-Device Computer Vision。大家可以在TensorFlow的GitHub項目中查看一些最佳官方用途,研究模型、示例和教程。

我們來看一個運行的示例。 在這里,我在TensorFlow上用隨機(jī)數(shù)據(jù)訓(xùn)練一個基于L2損失的2層ReLU網(wǎng)絡(luò)。

這個代碼有兩個主要組件:定義計算圖并多次運行這個圖。在定義計算圖時,我為輸入x,權(quán)重w1和w2以及目標(biāo)y創(chuàng)建placeholders進(jìn)行占位。然后在前向傳播中,我計算目標(biāo)y的預(yù)測以及損失值(損失值為y的真實值與預(yù)測值之間的L2距離)。最后,我讓Tensorflow計算關(guān)于w1和w2的梯度損失。

完成計算圖構(gòu)建之后,我創(chuàng)建一個會話框來運行計算圖。在這里我創(chuàng)建了numpy數(shù)組,它將填充建圖時創(chuàng)建的placeholders(占位符),將它們數(shù)值提供給x,y,w1,w2。為了訓(xùn)練網(wǎng)絡(luò),我反復(fù)運行計算圖,使用梯度來更新權(quán)重然后獲得loss,grad_w1和grad_w2的numpy數(shù)組。

Keras: 高級包裝

深度學(xué)習(xí)框架在兩個抽象級別上運行:低級別--數(shù)學(xué)運算和神經(jīng)網(wǎng)絡(luò)基本實體的實現(xiàn)(TensorFlow, Theano, PyTorch etc.)和高級別--使用低級基本實體來實現(xiàn)神經(jīng)網(wǎng)絡(luò)抽象,如模型和圖層(Keras) 。

Keras是其后端庫的包裝,該后端庫可以是TensorFlow或Theano - 這意味著如果你們在使用以TensorFlow為后端庫的Keras,你實際上是在運行TensorFlow代碼。Keras為您考慮到了許多基本細(xì)節(jié),因為它針對神經(jīng)網(wǎng)絡(luò)技術(shù)用戶,而且非常適合那些練習(xí)數(shù)據(jù)科學(xué)的人。它支持簡單快速的原型設(shè)計,支持多種神經(jīng)網(wǎng)絡(luò)架構(gòu),并可在CPU / GPU上無縫運行。

在這個例子中,對一個與之前例子中相似的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,我首先將模型對象定義為一系列圖層,然后定義優(yōu)化器對象。接下來,我建立模型,指定損失函數(shù),并用單個“fit”曲線來訓(xùn)練模型。

2. Theano (蒙特利爾大學(xué))

Theano是另一個用于快速數(shù)值計算的Python庫,可以在CPU或GPU上運行。它是蒙特利爾大學(xué)蒙特利爾學(xué)習(xí)算法小組開發(fā)的一個開源項目。它的一些最突出的特性包括GPU的透明使用,與NumPy緊密結(jié)合,高效的符號區(qū)分,速度/穩(wěn)定性優(yōu)化以及大量的單元測試。

遺憾的是,Youshua Bengio(MILA實驗室負(fù)責(zé)人)在2017年11月宣布他們將不再積極維護(hù)或開發(fā)Theano。原因在于Theano多年來推出的大部分創(chuàng)新技術(shù)現(xiàn)在已被其他框架所采用和完善。如果有興趣,大家仍然可以為它的開源庫做貢獻(xiàn)。

Theano在許多方面與TensorFlow相似。那么讓我們來看看另一個代碼示例,使用相同批量和輸入/輸出尺寸來訓(xùn)練神經(jīng)網(wǎng)絡(luò):

我首先定義了Theano符號變量(類似于TensorFlow占位符)。對于正向傳播,我計算預(yù)測和損失; 對于反向傳播,我計算梯度。然后我編譯一個函數(shù),根據(jù)數(shù)據(jù)和權(quán)重計算損失,得分和梯度。最后,我多次運行這個函數(shù)來訓(xùn)練網(wǎng)絡(luò)。

3. PyTorch (Facebook)

Pytorch在學(xué)術(shù)研究者中很受歡迎,也是相對比較新的深度學(xué)習(xí)框架。Facebook人工智能研究組開發(fā)了pyTorch來應(yīng)對一些在它前任數(shù)據(jù)庫Torch使用中遇到的問題。由于編程語言Lua的普及程度不高,Torch永遠(yuǎn)無法經(jīng)歷Google TensorFlow那樣的迅猛發(fā)展。因此,PyTorch采用了被已經(jīng)為許多研究人員,開發(fā)人員和數(shù)據(jù)科學(xué)家所熟悉的原始Python命令式編程風(fēng)格。同時它還支持動態(tài)計算圖,這一特性使得它對做時間序列以及自然語言處理數(shù)據(jù)相關(guān)工作的研究人員和工程師很有吸引力。

到目前為止,Uber將PyTorch使用得最好,它已經(jīng)構(gòu)建了Pyro,一種使用PyTorch作為其后端的通用概率編程語言。 PyTorch的動態(tài)差異化執(zhí)行能力和構(gòu)建梯度的能力對于概率模型中的隨機(jī)操作非常有價值。

PyTorch有3個抽象層次:

張量:命令性的ndarray,但在GPU上運行

變量:計算圖中的節(jié)點;存儲數(shù)據(jù)和梯度

模塊:神經(jīng)網(wǎng)絡(luò)層;可以存儲狀態(tài)或可學(xué)習(xí)的權(quán)重

在這里我將著重談一談張量抽象層次。 PyTorch張量就像numpy數(shù)組,但是它們可以在GPU上運行。沒有內(nèi)置的計算圖或梯度或深度學(xué)習(xí)的概念。在這里,我們使用PyTorch Tensors(張量)擬合一個2層網(wǎng)絡(luò):

正如你所看到的,我首先為數(shù)據(jù)和權(quán)重創(chuàng)建隨機(jī)張量。然后我計算正向傳播過程中的預(yù)測和損失,并在反向傳播過程中手動計算梯度。我也為每個權(quán)重設(shè)置梯度下降步長。最后,我通過多次運行該功能來訓(xùn)練網(wǎng)絡(luò)。

4. Torch (NYU / Facebook)

接下來我們來談?wù)凾orch。它是Facebook的開源機(jī)器學(xué)習(xí)庫、科學(xué)計算框架和基于Lua編程語言的腳本語言。它提供了廣泛的深度學(xué)習(xí)算法,并已被Facebook,IBM,Yandex和其他公司用于解決數(shù)據(jù)流的硬件問題。

作為PyTorch的直系祖先,Torch與PyTorchg共享了很多C后端。與具有3個抽象級別的PyTorch不同,Torch只有2個:張量和模塊。讓我們試一試一個使用Torch張量來訓(xùn)練兩層神經(jīng)網(wǎng)絡(luò)的代碼教程:

最初,我建立了一個多層的神經(jīng)網(wǎng)絡(luò)模型,以及一個損失函數(shù)。接下來,我定義一個回溯函數(shù),輸入權(quán)重并在權(quán)重上產(chǎn)生損失/梯度。在函數(shù)內(nèi)部,我計算前向傳播中的預(yù)測和損失,以及反向傳播中的梯度。最后,我反復(fù)將該回溯函數(shù)傳遞給優(yōu)化器進(jìn)行優(yōu)化。

5. Caffe (UC Berkeley)

Caffe是一個兼具表達(dá)性、速度和思維模塊化的深度學(xué)習(xí)框架。由伯克利人工智能研究小組和伯克利視覺和學(xué)習(xí)中心開發(fā)。雖然其內(nèi)核是用C ++編寫的,但Caffe有Python和Matlab相關(guān)接口。這對訓(xùn)練或微調(diào)前饋分類模型非常有用。雖然它在研究中使用得并不多,但它仍然很受部署模型的歡迎,正如社區(qū)貢獻(xiàn)者所證明的那樣。

為了使用Caffe訓(xùn)練和微調(diào)神經(jīng)網(wǎng)絡(luò),您需要經(jīng)過4個步驟:

轉(zhuǎn)換數(shù)據(jù):我們讀取數(shù)據(jù)文件,然后清洗并以Caffe可以使用的格式存儲它們。我們將編寫一個進(jìn)行數(shù)據(jù)預(yù)處理和存儲的Python腳本。

定義模型:模型定義了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)。我們選擇CNN體系結(jié)構(gòu)并在擴(kuò)展名為.prototxt的配置文件中定義其參數(shù)。

定義求解器:求解器負(fù)責(zé)模型優(yōu)化,定義所有關(guān)于如何進(jìn)行梯度下降的信息。我們在擴(kuò)展名為.prototxt的配置文件中定義求解器參數(shù)。

訓(xùn)練模型:一旦我們準(zhǔn)備好模型和求解器,我們就通過從終端調(diào)用caffe binary(咖啡因)來訓(xùn)練模型。訓(xùn)練好模型后,我們將在一個擴(kuò)展名為.caffemodel的文件中獲得訓(xùn)練好的模型。

我不會為Caffe做代碼展示,但是您可以在Caffe的主頁上查看一個教程。總的來說,Caffe對于前饋網(wǎng)絡(luò)和微調(diào)現(xiàn)有網(wǎng)絡(luò)非常有用。您可以輕松地訓(xùn)練模型而無需編寫任何代碼。它的Python接口非常有用,因為您可以在不使用Python代碼的情況下部署模型。不利的一面是,您需要為每個新的GPU圖層編寫C++內(nèi)核代碼(在Caffe下)。因此,大網(wǎng)絡(luò)(AlexNet,VGG,GoogLeNet,ResNet等)的構(gòu)建將會非常麻煩。

您應(yīng)該使用哪種深度學(xué)習(xí)框架?

由于Theano不再繼續(xù)被開發(fā),Torch是以不為許多人熟悉的Lua語言編寫的,Caffe還處于它的早熟階段,TensorFlow和PyTorch成為大多數(shù)深度學(xué)習(xí)實踐者的首選框架。雖然這兩個框架都使用Python,但它們之間存在一些差異:

PyTorch有更加干凈清爽的接口,更易于使用,特別適合初學(xué)者。大部分代碼編寫較為直觀,而不是與庫進(jìn)行戰(zhàn)斗。相反,TensorFlow擁有更繁雜的小型、含混的庫。

然而,TensorFlow擁有更多的支持和一個非常龐大,充滿活力和樂于助人的社區(qū)。這意味著TensorFlow的在線課程,代碼教程,文檔和博客帖子多于PyTorch。

也就是說,PyTorch作為一個新平臺,有許多有趣的功能尚未被完善。但是令人驚奇的是PyTorch在短短一年多的時間里取得了巨大的成就。

TensorFlow更具可擴(kuò)展性,并且與分布式執(zhí)行非常兼容。它支持從僅GPU到涉及基于實時試驗和錯誤的繁重分布式強(qiáng)化學(xué)習(xí)的龐大系統(tǒng)的所有的系統(tǒng)。

最重要的是,TensorFlow是“定義 - 運行”,在圖形結(jié)構(gòu)中定義條件和迭代,然后運行它。另一方面,PyTorch是“按運行定義”,其中圖結(jié)構(gòu)是在正向計算過程中實時定義的。換句話說,TensorFlow使用靜態(tài)計算圖,而PyTorch使用動態(tài)計算圖?;趧討B(tài)圖的方法為復(fù)雜體系結(jié)構(gòu)(如動態(tài)神經(jīng)網(wǎng)絡(luò))提供了更易于操作的調(diào)試功能和更強(qiáng)的處理能力?;陟o態(tài)圖的方法可以更方便地部署到移動設(shè)備,更容易部署到更具不同的體系結(jié)構(gòu),以及具有提前編譯的能力。

因此,PyTorch更適合于愛好者和小型項目的快速原型開發(fā),而TensorFlow更適合大規(guī)模部署,尤其是在考慮跨平臺和嵌入式部署時。 TensorFlow經(jīng)受了時間的考驗,并且仍然被廣泛使用。它對大型項目具有更多功能和更好的可擴(kuò)展性。 PyTorch越來越容易學(xué)習(xí),但它并沒有與TensorFlow相同的一體化整合功能。這對于需要快速完成的小型項目非常有用,但對于產(chǎn)品部署并不是最佳選擇。

寫在最后

上述列舉只是眾多框架中較為突出的框架,并且大多數(shù)支持Python語言。去幾年里發(fā)布了多個新的深度學(xué)習(xí)框架,如DeepLearning4j(Java),Apache的MXNet(R,Python,Julia),Microsoft CNTK(C ++,Python)和Intel的Neon(Python)。每個框架都是不同的,因為它們是由不同的人為了不同的目的而開發(fā)的。有一個整體的大致了解會幫助你解決你的下一個深度學(xué)習(xí)難題。在選擇適合您的最佳選擇時,易于使用(就架構(gòu)和處理速度而言),GPU支持,教程和培訓(xùn)材料的獲得難度,神經(jīng)網(wǎng)絡(luò)建模功能以及支持的語言都是重要的考慮因素。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉