現在最火的深度學習框架是什麼?


@機器之心 比較了主流的五大框架並且給出了Anusua Trivedi建議的最佳框架。不過題主問的是現在最火的深度學習框架,答案當然是

TensorFlow

下邊鏈接是github上一個更新還算勤快的deep learning projects排行榜

https://github.com/hunkim/DeepLearningStars

排行依據是stars

個人覺得從推廣角度,MXNet短期不會好,比如Computer Vision,如果業界學界最新最有趣的方法和論文都是基於TF(及Caffe)實現,那麼對於新來的人,有什麼理由要用MXNet呢?performance/memory真的那麼重要嗎?

況且Anusua Trivedi的結論應該是大半年前的。最近TF 1.0剛發布,號稱速度上提高不少。

另外吐槽一句MXNet的文檔真的不怎麼樣,儘管Amazon表示支持了,仍然沒看到什麼改善。MXNet喪失了先機,推廣也不給力。相反TF在這點上和MXNet簡直就是天壤之別,畢竟是Jeff Dean搞出來的東西,得到的力度顯然是任何其他DL框架都比不了的。

最後也吐槽一下 @機器之心 ,作為「 國內領先的前沿科技媒體和產業服務平台 」,發布翻譯文章的時候請盡量使用人工,而不是人工智慧,「performance/memory」翻譯成「表現/記憶」顯的很不專業。


謝邀。

通過微軟數據科學家 Anusua Trivedi 對目前五大主流深度學習框架的比較分析,MXNET是最好選擇。

符號構架

符號計算構架(如 CNTK,MXNET,TensorFlow,Theano)被定義為一個向量運算符的符號圖,例如矩陣的加法/乘法或卷積。一個層僅是這些運算符的組合。構造塊(運算符)良好的粒度允許用戶在不需要在低級語言(如在 Caffe 中)中實現的情況下,開發新的複雜層類型。

在我的工作中,我使用了不同的符號計算框架。然而,我發現由於每個框架的設計和目前的實現方法不同,它們都有各自的優缺點,沒有一個框架能完美地滿足所有的需要。針對我的需要,我選擇使用 Theano。

我們比較了下列符號計算框架:

Theano

  • 軟體:Theano

  • 開發者:Université de Montréal

  • 軟體證書:BSD 證書

  • 是否開源:是

  • 平台:跨平台

  • 編寫語言:Python

  • 介面:Python

  • 是否支持 CUDA:是

  • 自動微分:是

  • 是否有預訓練模型:通過 Lasagne 的 model zoo

  • 循環網路:是

  • 卷積網路:是

  • 隨機儲存器/動態貝葉斯網路:是

TensorFlow

  • 軟體:TensorFlow

  • 開發者:Google Brain Team

  • 軟體證書:Apache 2.0

  • 是否開源:是

  • 平台:Linux,Mac OS X

  • 編寫語言:C++,Python

  • 介面:Python,C/C++

  • 是否支持 CUDA:是

  • 自動微分:是

  • 是否有預訓練模型:否

  • 循環網路:是

  • 卷積網路:是

  • 隨機儲存器/動態貝葉斯網路:是

MXNET

  • 軟體:MXNET

  • 開發者:分散式(深度)機器學習社區

  • 軟體證書:Apache 2.0

  • 是否開源:是

  • 平台:Ubuntu, OS X, Windows, AWS, Android, iOS, JavaScript

  • 編寫語言:C++, Python, Julia, Matlab, R, Scala

  • 介面:C++, Python, Julia, Matlab, JavaScript, R, Scala

  • 是否支持 CUDA:是

  • 自動微分:是

  • 是否有預訓練模型:是

  • 循環網路:是

  • 卷積網路:是

  • 隨機儲存器/動態貝葉斯網路:是

優缺點

非符號構架優點:

  • 像 torch,caffe 這樣的非符號(命令式)神經網路構架的計算部分的設計非常相似。

  • 根據可表達性,設計良好的命令構架也能揭露類圖介面(例如 torch/nngraph)。

非符號架構缺點:

  • 命令構架主要的缺點實際上在於人工優化。例如,就地操作必須要人工實現。

  • 大多命令構架設計得不夠好,比不上符號構架的可表達性。

符號構架優點:

  • 符號構架可能可以從依賴圖中自動推導優化。

  • 一個符號構架可以利用更多內存復用機會,這點 MXNET 做得很好。

  • 符號構架能自動計算最佳進度表。詳情請參照 TensorFlow 白皮書:http://download.tensorflow.org/paper/whitepaper2015.pdf

符號構架缺點:

  • 現存可用開源符號構架的表現仍遜色於命令構架。

符號構架缺點:

  • 現存可用開源符號構架的表現仍遜色於命令構架。

增加新運算符

在這些構架中,增加一個表現理想的運算符並不容易。

Theano / MXNET

TensorFlow在內聯 C 支持的 Python 下,可以增加運算符。在 C++ 中推進,在 Python 中符號梯度。

代碼復用性

訓練深度網路非常耗時。所以,Caffe 發布了一些預訓練模型/權重(model zoo),它們能作為初始權重被用於特殊領域或自定義圖像的遷移學習或微調深度網路。

  • TheanoLasagne:是構建在頂尖 Theano 上的高級構架。在 Lasagne 中使用 Caffe 預訓練模型權重非常容

  • TensorFlow:不支持預訓練模型。

  • MXNET:有一個 caffe 轉換工具,能夠轉換基於 caffe 的預訓練模型權重,使其可以適應 MXNET。

低級 Tensor 操作符

理想而高效的低級運算符實現能充當新模型的原料,節省了寫新運算符的工作量。

TheanoTensorFlowMXNET許多基礎運算符相當好非常少

控制流運算符

控制流運算符增加符號引擎的表達性和通用性。

TheanoTensorFlowMXNET支持試驗階段不支持

高級支持

  • Theano:純凈的符號計算構架。高級構架,加以改造,可以適用於各種所需的使用方式。成功案例包括 Keras、Lasagne、blocks。

  • TensorFlow:設計良好,不僅考慮到了神經網路的訓練,同時避免徹底成為神經網路構架,是非常出色的成果。圖像、隊列、圖像增加器等能成為更高級包裝的有用構造塊。

  • MXNET:除了符號部分,MXNET 也支持圖像分類——從數據載入到構建模型,該模型有可以開始訓練的方法。

性能

單 GPU 下的基準測試

我使用單 GPU (NVIDIA Quadro K1200 GPU)在 MNIST 數據集上對 LeNet 模型進行了基準測試。

TheanoTensorFlowMXNET好不太好極佳

內存

顯存有限可能是大型模型的常見問題。

TheanoTensorFlowMXNET好不太好極佳

單 GPU 速度

Theano 花了很長的時間編譯圖像,特別是模型複雜的時候。TensorFlow 有點慢。

Theano / MXNETTensorFlow比得上 CuDNNv4慢一倍

並行/分散式支持

TheanoTensorFlowMXNET試驗多 GPU多 GPU分散式

總結

Theano(高級的 Lasagne 和 Keras)是深度學習模型的極佳選擇。很容易用 Lasagne/Keras 實現新網路或者編輯現存網路。我更喜歡用 python 語言,並且因為 Lasagne/Keras 有非常成熟的 python 介面而更喜歡使用它們。然而,它們不支持 R。我已經嘗試在 Lasagne/Keras 中使用遷移學習和微調,編輯一個現存網路並自定義特定域的自定義數據是非常容易的。

不同構架之間的比較顯示了 MXNET 是最好的選擇(更好的表現/記憶)。此外,它對 R 的支持很出色。事實上,它是唯一支持所有 R 函數的構架。在 MXNET 中,遷移學習和微調網路是可能實現的,但是不太容易(和 Lasagne/Keras 相比)。這使得編輯現存訓練好的網路更困難,因此使用特定域的自定義數據也有點難。

同時,也推薦你這篇深度 | 主流深度學習框架對比:看你最適合哪一款?


自製新鮮出爐~ 少了Chainer還是比較遺憾的。

考慮的維度相對全面,描述比較隨意一點,對於選擇框架的話,其實看完根據自己處於哪個階段、現有裝備情況等,還是比較有參考意義的。

還有一些信息可以直接看[WIKI-Deep Learning Software]。


你們要搞PR可以,但是真正做事情的人沒空和你們玩PR。

謝邀果斷匿。


推薦閱讀:

TAG:深度學習DeepLearning |