從三大神經網絡,測試對比TensorFlow、MXNet、CNTK、Theano四個框架

選自data science central
機器之心編譯
參與:蔣思源

本文比較了 Keras 支持的主流深度學習框架性能,包括 TensorFlow、CNTK、MXNet 和 Theano,做者但願經過使用同一模型和不一樣的 Keras 後端,而測試不一樣框架在不一樣類型任務中的性能。本文經過五個任務分別測試了 MLP、CNN 和 RNN 模型,機器之心不只對該試驗進行了介紹,同時還使用 Keras(TensorFlow 後端)在 MNIST 數據集上試運行了 CNN。
若是咱們對 Keras 在數據科學和深度學習方面的流行還有疑問,那麼考慮一下全部的主流雲平臺和深度學習框架的支持狀況就能發現它的強大之處。目前,Keras 官方版已經支持谷歌的 TensorFlow、微軟的 CNTK、蒙特利爾大學的 Theano,此外,AWS 去年就宣佈 Keras 將支持 Apache MXNet,上個月發佈的 MXNet 0.11 就新增 Core ML 和 Keras v1.2 的支持。不過到目前爲止 MXNet 好像只支持 Keras v1.2.2 而不是最新版 2.0.5。
儘管咱們可使用任何 Keras 所支持的後端部署模型,但開發者和方案架構師應該瞭解 Keras 做爲各深度學習庫的高級 API,其本質上是不支持各個庫所提供的所有基本參數微調。所以若是咱們想要精細調整後端框架所提供的全部參數,那麼咱們最好直接使用深度學習框架而不是使用 Keras。固然這個狀況會隨着各類工具添加到 Keras 和深度學習框架中而獲得改善,但如今 Keras 還是一個十分優秀的工具,它能極好地適應於深度學習開發的早期階段,而且爲數據科學家和算法工程師快速構建與測試複雜的深度學習模型提供了強大的工具。
機器之心也嘗試使用 TensorFlow 做爲後端測試了 Keras,咱們發現整個模型的搭建很是簡潔,連入門者都能輕鬆讀懂整個網絡的架構。相比於直接使用 TensorFlow 搭建卷積神經網絡,將 Keras 做爲高級 API,並使用 TensorFlow 做爲後端要簡單地多。後面咱們將會把 Keras 實現 CNN 的代碼與註釋上傳至 機器之心 GitHub 項目中,下圖是咱們使用 TensorFlow 做爲後端初始化訓練的狀況:
如下是整個卷積網絡的架構:

上面的代碼清晰地定義了整個網絡疊加所使用的層級。Sequential 表明序貫模型,即多個網絡層的線性堆疊。在創建序貫模型後,咱們能夠從輸入層開始依次添加不一樣的層級以實現整個網絡的構建。上面的架構首先使用的是 2 維卷積層 Conv2D,卷積核大小爲 3*3,激活函數爲 ReLU,其中第一個參數 32 表明卷積核數目。此外,該卷積網絡還使用了最大池化層 MaxPooling2D,pool_size=(2,2) 爲兩個方向(豎直,水平)上的下采樣因子;Dropout 層,以 0.25 的機率在每次更新參數時隨機斷開輸入的神經元;Dense 層,即全鏈接層;還有 Flatten 層,即將輸入「壓平」,也就是把多維的輸入一維化,經常使用在從卷積層到全鏈接層的過渡。以上是該架構的基本層級,更詳細的代碼及註釋請查看機器之心 GitHub 項目。
下面是 Jasmeet Bhatia 測評的具體狀況。

Keras 後端框架性能測試

Keras 還能使開發人員快速測試使用不一樣深度學習框架做爲 Keras 後端的相對性能。Keras 配置文件中有一個參數決定了使用哪個深度學習框架做爲後端,所以咱們能夠構建一個相同的模型在不一樣的深度學習框架(如 TensorFlow、CNTK、Theano)上直接運行。而對於 MXNet 來講,因爲目前只支持 Keras ver1.2.2,因此咱們須要對代碼作一點點修改就行。固然這個模型能夠根據各個深度學習框架中的不一樣庫而進行微調以實現更好的性能,不過 Keras 仍然提供了很好的機會來比較這些基本庫之間的性能。
早先已經有一些文章比較了 Keras 所支持後端框架的相對性能,可是對比的時間都比較早,且主要是以 TensorFlow 和 Theano 做爲後端的對比。所以本文根據 Keras 和深度學習框架的最新版本在更大的範圍內作了一次對比。
咱們首先了解一下用於測試的配置。全部的性能測試都在 Azure NC6 VM 上使用 Nvidia Tesla K80 GPU 執行,使用的 VM 鏡像是 Ubuntu 上的 Azure DSVM(數據科學虛擬機)。除了其餘數據科學工具,咱們還預安裝了 Keras、TensorFlow、Theano 和 MXNet。對於測試來講,全部的軟件包都是用的最新版,但由於 MXNet 只支持 Keras 1.2.2,因此其使用的舊版。

配置
由於每個深度學習框架的依賴項不一樣,咱們的測試在下面三種配置中運行:

性能測試
爲了比較 DL 框架不一樣的性能,咱們以下所述使用了 5 種不一樣的測試模型。爲了確保沒有特定的框架獲得任何特定的處理,全部模型都來自 GitHub Keras/examples 倉庫中所維護的。
  • 模型源代碼地址:https://github.com/fchollet/keras/tree/master/examples
  • 測試的代碼能夠在做者的 GitHub 項目中找到:https://github.com/jasmeetsb/deep-learning-keras-projects
注意:有兩個測試 MXNet 並無參與,由於 MXNet 並不支持最新版的 Keras,且 MXNet 做爲後端運行該模型須要調整大量代碼。在其餘三個測試中以 MXNet 做爲後端也須要進行一些細微的調整,主要是新版本的 Keras 重命名了一些函數。
測試一:CIFAR-10 & CNN
  • 學習模型的類型:卷積神經網絡(CNN)
  • 數據集/任務:CIFAR-10 小圖片數據集
  • 目標:將圖片分類爲 10 個類別
根據每個 epoch 的訓練速度,TensorFlow 要比 MXNet 快那麼一點點。
而按照準確度/收斂速度來講,CNTK 在前 25 個 epoch 中領先一點,而在 50 個 epoch 後,其餘框架都到達相近的準確度,而 CNTK 卻略微降低。
測試二:MNIST & CNN
  • 學習模型的類型:CNN
  • 數據集/任務:MNIST 手寫數字數據集
  • 目標:將圖片分類爲 10 類手寫數字
在該測試中,TensorFlow 明顯要在訓練時間上更加優秀,但在準確度/收斂速度上全部框架都有類似的特徵。
測試三:MNIST&MLP
  • 學習模型的類型:多層感知機/深度神經網絡
  • 數據集/任務:MNIST 手寫數字數據集
  • 目標:將圖片分類爲 10 類手寫數字
在使用 MNIST 數據集執行標準的神經網絡測試中,CNTK、TensorFlow 和 Theano 實現了類似的分數(2.5 – 2.7 s/epoch),而 MXNet 卻只須要 1.4s/epoch。此外,MXNet 一樣在準確度/收斂速度上有一點點優點。
測試四:MNIST&RNN
  • 學習模型的類型:層級循環神經網絡(HRNN)
  • 數據集/任務:MNIST 手寫數字數據集
  • 目標:將圖片分類爲 10 類手寫數字
在訓練時間上,CNTK 和 MXNet 有類似的性能(162 – 164 s/epoch),TensorFlow 的時間爲 179s/epoch,而 Theano 所需的時間則顯著地增多。
測試五:BABI & RNN
  • 學習模型的類型:循環神經網絡(RNN)
  • 數據集/任務:bAbi Project (https://research.fb.com/downloads/babi/)
  • 目標:分別根據故事(story)和問題訓練兩個循環神經網絡,導致合併的向量能夠回答一系列 bAbi 任務。
該測試並無使用 MXNet,TensorFlow 和 Theano 在每個 epoch 上要比 CNTK 要慢了一倍多。

結語


  • TensorFlow 在 CNN 測試中表現都是最好的,可是在 RNN 測試中表現並不太好。
  • CNTK 在 Babi RNN 和 MNIST RNN 測試上要比 TensorFlow 和 Theano 好得多,可是在 CNN 測試上要比 TensorFlow 差一些。
  • MXNet 在 RNN 測試上要比 CNTK 和 TensorFlow 要好一點,此外它在 MLP 上要比全部框架的性能都要好。不過 MXNet 並不支持 Keras v2 函數,因此咱們並不能在沒有修正代碼的狀況下直接測試,所以可能會有一點誤差。
  • Theano 在深度神經網絡(MLP)中要比 TensorFlow 和 CNTK 好一點。
從上面的結果能夠看出來,全部的深度學習框架都有其擅長的領域,並無哪一個框架必定要比其餘框架好。CNTK 可做爲 Keras 後端並用於 RNN 的使用案例,TensorFlow 可用於 CNN,而 MXNet 雖然顯示了性能上很是大的潛力,但仍然仍是讓人期待其支持全部 Keras 函數的時候。在開源社區中,這些框架都在不斷擴展與加強,從而提供更好的性能並輕鬆地部署到產品中。在考慮使用這些深度學習框架投入生產時,性能是首要的。在大多數狀況下,咱們還須要考慮部署的難易度和其餘輔助工具,它們都將幫助咱們管理產品化的機器學習模型。最後,全部的框架性能都是在做爲 Keras 後端時測評的,因此會有一點偏差,不過本文至少能夠幫助你們對這些框架的性能有必定了解。此外本文在你們採用不一樣後端時能夠給出一點相對客觀的建議。

原文連接:http://www.datasciencecentral.com/profiles/blogs/search-for-the-fastest-deep-learning-framework-supported-by-keras
相關文章
相關標籤/搜索