自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

人工智能 深度學(xué)習(xí)
本文比較了 Keras 支持的主流深度學(xué)習(xí)框架性能,包括 TensorFlow、CNTK、MXNet 和 Theano,作者希望通過使用同一模型和不同的 Keras 后端,而測試不同框架在不同類型任務(wù)中的性能。本文通過五個任務(wù)分別測試了 MLP、CNN 和 RNN 模型,機(jī)器之心不僅對該試驗進(jìn)行了介紹,同時還使用 Keras(TensorFlow 后端)在 MNIST 數(shù)據(jù)集上試運行了 CNN。

本文比較了 Keras 支持的主流深度學(xué)習(xí)框架性能,包括 TensorFlow、CNTK、MXNet 和 Theano,作者希望通過使用同一模型和不同的 Keras 后端,而測試不同框架在不同類型任務(wù)中的性能。本文通過五個任務(wù)分別測試了 MLP、CNN 和 RNN 模型,機(jī)器之心不僅對該試驗進(jìn)行了介紹,同時還使用 Keras(TensorFlow 后端)在 MNIST 數(shù)據(jù)集上試運行了 CNN。

如果我們對 Keras 在數(shù)據(jù)科學(xué)和深度學(xué)習(xí)方面的流行還有疑問,那么考慮一下所有的主流云平臺和深度學(xué)習(xí)框架的支持情況就能發(fā)現(xiàn)它的強(qiáng)大之處。目前,Keras 官方版已經(jīng)支持谷歌的 TensorFlow、微軟的 CNTK、蒙特利爾大學(xué)的 Theano,此外,AWS 去年就宣布 Keras 將支持 Apache MXNet,上個月發(fā)布的 MXNet 0.11 就新增 Core ML 和 Keras v1.2 的支持。不過到目前為止 MXNet 好像只支持 Keras v1.2.2 而不是***版 2.0.5。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

盡管我們可以使用任何 Keras 所支持的后端部署模型,但開發(fā)者和方案架構(gòu)師應(yīng)該了解 Keras 作為各深度學(xué)習(xí)庫的高級 API,其本質(zhì)上是不支持各個庫所提供的全部基本參數(shù)微調(diào)。因此如果我們想要精細(xì)調(diào)整后端框架所提供的所有參數(shù),那么我們***直接使用深度學(xué)習(xí)框架而不是使用 Keras。當(dāng)然這個情況會隨著各種工具添加到 Keras 和深度學(xué)習(xí)框架中而得到改善,但現(xiàn)在 Keras 仍是一個十分優(yōu)秀的工具,它能極好地適應(yīng)于深度學(xué)習(xí)開發(fā)的早期階段,并且為數(shù)據(jù)科學(xué)家和算法工程師快速構(gòu)建與測試復(fù)雜的深度學(xué)習(xí)模型提供了強(qiáng)大的工具。

機(jī)器之心也嘗試使用 TensorFlow 作為后端測試了 Keras,我們發(fā)現(xiàn)整個模型的搭建非常簡潔,連入門者都能輕松讀懂整個網(wǎng)絡(luò)的架構(gòu)。相比于直接使用 TensorFlow 搭建卷積神經(jīng)網(wǎng)絡(luò),將 Keras 作為高級 API,并使用 TensorFlow 作為后端要簡單地多。后面我們將會把 Keras 實現(xiàn) CNN 的代碼與注釋上傳至 機(jī)器之心 GitHub 項目 中,下圖是我們使用 TensorFlow 作為后端初始化訓(xùn)練的情況:

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

以下是整個卷積網(wǎng)絡(luò)的架構(gòu):

 

  1. model = Sequential() 
  2. model.add(Conv2D(32, kernel_size=(3, 3), 
  3.                  activation='relu'
  4.                  input_shape=input_shape)) 
  5. model.add(Conv2D(64, (3, 3), activation='relu')) 
  6. model.add(MaxPooling2D(pool_size=(2, 2))) 
  7. model.add(Dropout(0.25)) 
  8. model.add(Flatten()) 
  9. model.add(Dense(128, activation='relu')) 
  10. model.add(Dropout(0.5)) 
  11. model.add(Dense(num_classes, activation='softmax')) 

 

上面的代碼清晰地定義了整個網(wǎng)絡(luò)疊加所使用的層級。Sequential 代表序貫?zāi)P停炊鄠€網(wǎng)絡(luò)層的線性堆疊。在建立序貫?zāi)P秃?,我們可以從輸入層開始依次添加不同的層級以實現(xiàn)整個網(wǎng)絡(luò)的構(gòu)建。上面的架構(gòu)首先使用的是 2 維卷積層 Conv2D,卷積核大小為 3*3,激活函數(shù)為 ReLU,其中***個參數(shù) 32 代表卷積核數(shù)目。此外,該卷積網(wǎng)絡(luò)還使用了***池化層 MaxPooling2D,pool_size=(2,2) 為兩個方向(豎直,水平)上的下采樣因子;Dropout 層,以 0.25 的概率在每次更新參數(shù)時隨機(jī)斷開輸入的神經(jīng)元;Dense 層,即全連接層;還有 Flatten 層,即將輸入「壓平」,也就是把多維的輸入一維化,常用在從卷積層到全連接層的過渡。以上是該架構(gòu)的基本層級,更詳細(xì)的代碼及注釋請查看機(jī)器之心 GitHub 項目。

下面是 Jasmeet Bhatia 測評的具體情況。

Keras 后端框架性能測試

Keras 還能使開發(fā)人員快速測試使用不同深度學(xué)習(xí)框架作為 Keras 后端的相對性能。Keras 配置文件中有一個參數(shù)決定了使用哪一個深度學(xué)習(xí)框架作為后端,因此我們可以構(gòu)建一個相同的模型在不同的深度學(xué)習(xí)框架(如 TensorFlow、CNTK、Theano)上直接運行。而對于 MXNet 來說,由于目前只支持 Keras ver1.2.2,所以我們需要對代碼做一點點修改就行。當(dāng)然這個模型可以根據(jù)各個深度學(xué)習(xí)框架中的不同庫而進(jìn)行微調(diào)以實現(xiàn)更好的性能,不過 Keras 仍然提供了很好的機(jī)會來比較這些基本庫之間的性能。

早先已經(jīng)有一些文章比較了 Keras 所支持后端框架的相對性能,但是對比的時間都比較早,且主要是以 TensorFlow 和 Theano 作為后端的對比。因此本文根據(jù) Keras 和深度學(xué)習(xí)框架的***版本在更大的范圍內(nèi)做了一次對比。

我們首先了解一下用于測試的配置。所有的性能測試都在 Azure NC6 VM 上使用 Nvidia Tesla K80 GPU 執(zhí)行,使用的 VM 鏡像是 Ubuntu 上的 Azure DSVM(數(shù)據(jù)科學(xué)虛擬機(jī))。除了其他數(shù)據(jù)科學(xué)工具,我們還預(yù)安裝了 Keras、TensorFlow、Theano 和 MXNet。對于測試來說,所有的軟件包都是用的***版,但因為 MXNet 只支持 Keras 1.2.2,所以其使用的舊版。

配置

因為每一個深度學(xué)習(xí)框架的依賴項不同,我們的測試在下面三種配置中運行:

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

 

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

性能測試

為了比較 DL 框架不同的性能,我們?nèi)缦滤鍪褂昧?5 種不同的測試模型。為了確保沒有特定的框架得到任何特定的處理,所有模型都來自 GitHub Keras/examples 倉庫中所維護(hù)的。

模型源代碼地址:https://github.com/fchollet/keras/tree/master/examples

測試的代碼可以在作者的 GitHub 項目中找到:https://github.com/jasmeetsb/deep-learning- keras-projects

注意:有兩個測試 MXNet 并沒有參與,因為 MXNet 并不支持***版的 Keras,且 MXNet 作為后端運行該模型需要調(diào)整大量代碼。在其他三個測試中以 MXNet 作為后端也需要進(jìn)行一些細(xì)微的調(diào)整,主要是新版本的 Keras 重命名了一些函數(shù)。

測試一:CIFAR-10 & CNN

  • 學(xué)習(xí)模型的類型:卷積神經(jīng)網(wǎng)絡(luò)(CNN)
  • 數(shù)據(jù)集/任務(wù):CIFAR-10 小圖片數(shù)據(jù)集
  • 目標(biāo):將圖片分類為 10 個類別

根據(jù)每一個 epoch 的訓(xùn)練速度,TensorFlow 要比 MXNet 快那么一點點。

而按照準(zhǔn)確度/收斂速度來說,CNTK 在前 25 個 epoch 中領(lǐng)先一點,而在 50 個 epoch 后,其他框架都到達(dá)相近的準(zhǔn)確度,而 CNTK 卻略微下降。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

測試二:MNIST & CNN

  • 學(xué)習(xí)模型的類型:CNN
  • 數(shù)據(jù)集/任務(wù):MNIST 手寫數(shù)字?jǐn)?shù)據(jù)集
  • 目標(biāo):將圖片分類為 10 類手寫數(shù)字

在該測試中,TensorFlow 明顯要在訓(xùn)練時間上更加優(yōu)秀,但在準(zhǔn)確度/收斂速度上所有框架都有相似的特征。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

測試三:MNIST&MLP

  • 學(xué)習(xí)模型的類型:多層感知機(jī)/深度神經(jīng)網(wǎng)絡(luò)
  • 數(shù)據(jù)集/任務(wù):MNIST 手寫數(shù)字?jǐn)?shù)據(jù)集
  • 目標(biāo):將圖片分類為 10 類手寫數(shù)字

在使用 MNIST 數(shù)據(jù)集執(zhí)行標(biāo)準(zhǔn)的神經(jīng)網(wǎng)絡(luò)測試中,CNTK、TensorFlow 和 Theano 實現(xiàn)了相似的分?jǐn)?shù)(2.5 – 2.7 s/epoch),而 MXNet 卻只需要 1.4s/epoch。此外,MXNet 同樣在準(zhǔn)確度/收斂速度上有一點點優(yōu)勢。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

測試四:MNIST&RNN

  • 學(xué)習(xí)模型的類型:層級循環(huán)神經(jīng)網(wǎng)絡(luò)(HRNN)
  • 數(shù)據(jù)集/任務(wù):MNIST 手寫數(shù)字?jǐn)?shù)據(jù)集
  • 目標(biāo):將圖片分類為 10 類手寫數(shù)字

在訓(xùn)練時間上,CNTK 和 MXNet 有相似的性能(162 – 164 s/epoch),TensorFlow 的時間為 179s/epoch,而 Theano 所需的時間則顯著地增多。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

測試五:BABI & RNN

  • 學(xué)習(xí)模型的類型:循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)
  • 數(shù)據(jù)集/任務(wù):bAbi Project (https://research.fb.com/downloads/babi/)
  • 目標(biāo):分別根據(jù)故事(story)和問題訓(xùn)練兩個循環(huán)神經(jīng)網(wǎng)絡(luò),致使合并的向量可以回答一系列 bAbi 任務(wù)。

該測試并沒有使用 MXNet,TensorFlow 和 Theano 在每一個 epoch 上要比 CNTK 要快了一倍多。

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

從三大神經(jīng)網(wǎng)絡(luò),測試對比TensorFlow、MXNet、CNTK、Theano四個框架

  • TensorFlow 在 CNN 測試中表現(xiàn)都是***的,但是在 RNN 測試中表現(xiàn)并不太好。
  • CNTK 在 Babi RNN 和 MNIST RNN 測試上要比 TensorFlow 和 Theano 好得多,但是在 CNN 測試上要比 TensorFlow 差一些。
  • MXNet 在 RNN 測試上要比 CNTK 和 TensorFlow 要好一點,此外它在 MLP 上要比所有框架的性能都要好。不過 MXNet 并不支持 Keras v2 函數(shù),所以我們并不能在沒有修正代碼的情況下直接測試,因此可能會有一點偏差。
  • Theano 在深度神經(jīng)網(wǎng)絡(luò)(MLP)中要比 TensorFlow 和 CNTK 好一點。

結(jié)語

從上面的結(jié)果可以看出來,所有的深度學(xué)習(xí)框架都有其擅長的領(lǐng)域,并沒有哪個框架一定要比其他框架好。CNTK 可作為 Keras 后端并用于 RNN 的使用案例,TensorFlow 可用于 CNN,而 MXNet 雖然顯示了性能上非常大的潛力,但仍然還是讓人期待其支持所有 Keras 函數(shù)的時候。在開源社區(qū)中,這些框架都在不斷擴(kuò)展與增強(qiáng),從而提供更好的性能并輕松地部署到產(chǎn)品中。在考慮使用這些深度學(xué)習(xí)框架投入生產(chǎn)時,性能是首要的。在大多數(shù)情況下,我們還需要考慮部署的難易度和其他輔助工具,它們都將幫助我們管理產(chǎn)品化的機(jī)器學(xué)習(xí)模型。***,所有的框架性能都是在作為 Keras 后端時測評的,所以會有一點誤差,不過本文至少可以幫助大家對這些框架的性能有一定了解。此外本文在大家采用不同后端時可以給出一點相對客觀的建議。

責(zé)任編輯:未麗燕 來源: 機(jī)器之心
相關(guān)推薦

2017-07-05 14:21:30

框架TensorFlowTheano

2017-02-21 10:00:44

大數(shù)據(jù)深度學(xué)習(xí)框架對比

2017-03-01 13:36:41

TensorFlowTheano框架

2020-02-25 15:04:48

深度學(xué)習(xí)編程人工智能

2017-03-06 15:25:47

PyTorchMxnet深度學(xué)習(xí)

2017-09-11 10:00:59

Caffe2TensorFlow神經(jīng)網(wǎng)絡(luò)

2018-11-04 11:59:03

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2018-07-03 16:10:04

神經(jīng)網(wǎng)絡(luò)生物神經(jīng)網(wǎng)絡(luò)人工神經(jīng)網(wǎng)絡(luò)

2018-08-27 17:05:48

tensorflow神經(jīng)網(wǎng)絡(luò)圖像處理

2019-03-26 10:20:10

神經(jīng)網(wǎng)絡(luò)機(jī)器學(xué)習(xí)書籍

2018-03-22 13:34:59

TensorFlow神經(jīng)網(wǎng)絡(luò)

2020-11-02 08:00:00

深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)人工智能

2022-06-27 23:31:01

JavaScript框架開發(fā)

2017-09-10 07:07:32

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)集可視化

2023-10-29 18:08:33

GPU神經(jīng)網(wǎng)絡(luò)CPU

2017-08-28 21:31:37

TensorFlow深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2018-02-06 15:40:50

2025-02-25 14:13:31

2017-08-29 13:50:03

TensorFlow深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)

2018-05-13 16:23:40

工業(yè)物聯(lián)網(wǎng)工業(yè)4.0物聯(lián)網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號