從PyTorch到Mxnet ,對比7大Python深度學習框架

李亞洲發表於2017-03-05

選擇什麼深度學習框架一直是開發者非常關心的一個話題,而且深度學習框架之間的「戰爭」也越來越激烈。過去一段時間,機器之心發過多篇機器學習框架的對比文章,但隨著 Python 逐漸成為機器學習社群最受歡迎的語言,支援 Python 的深度學習框架的效能也值得關注。Indico Data Solutions 的 CTO Madison May 根據他們公司在產品和開發過程中的經驗對 7 大 Python 深度學習框架進行了對比,希望這篇文章能對機器之心的讀者有所幫助。


最近我無意間在「Best Python library for neural networks」話題下發現了一個我以前的資料科學棧交換(Data Science Stack Exchange)的答案,並且 Python 深度學習生態系統在過去兩年半中的演變打擊到了我。我在 2014 年 7 月推薦的庫,pylearn2,已經不再被積極地開發或者維護,大量的深度學習庫開始接替它的位置。這些庫每一個都各有千秋。我們已經在 indico 的產品或者開發中使用了以下列表中的大部分的技術,但是對於剩下一些我們沒有使用的,我將會借鑑他人的經驗來幫助給出 2017 年 Python 深度學習生態系統的清晰的、詳盡的理解。


確切地說,我們將會關注:


  • Theano

  • Lasagne

  • Blocks

  • TensorFlow

  • Keras

  • MXNet

  • PyTorch


下面是對這 7 大 Python 深度學習框架的描述以及優缺點的介紹,而且也為每個框架的使用推薦了一些資源,但因微信不支援外網連結,讀者們請點選閱讀原網址檢視資源。


Theano


連結:https://github.com/Theano/Theano


描述:Theano 是一個 Python 庫,允許你定義、優化並且有效地評估涉及到多維陣列的數學表示式。它與 GPUs 一起工作並且在符號微分方面表現優秀。


文件:http://deeplearning.net/software/theano/


概述:Theano 是數值計算的主力,它支援了許多我們列表當中的其他的深度學習框架。Theano 由 Frédéric Bastien 建立,這是蒙特利爾大學機器學習研究所(MILA)背後的一個非常優秀的研究團隊。它的 API 水平較低,並且為了寫出效率高的 Theano,你需要對隱藏在其他框架幕後的演算法相當的熟悉。如果你有著豐富的學術機器學習知識,正在尋找你的模型的精細的控制方法,或者想要實現一個新奇的或者不同尋常的模型,Theano 是你的首選庫。總而言之,為了靈活性,Theano 犧牲了易用性。


優點:


  • 靈活

  • 正確使用時的高效能


缺點:


  • 較高的學習難度

  • 低水平的 API

  • 編譯複雜的符號圖可能很慢


Lasagne


連結:https://github.com/Lasagne/Lasagne


描述:在 Theano 上建立和訓練神經網路的輕量級庫


文件:http://lasagne.readthedocs.org/


概述:因為 Theano 致力於成為符號數學中最先且最好的庫,Lasagne 提供了在 Theano 頂部的抽象,這使得它更適合於深度學習。它主要由當前 DeepMind 研究科學家 Sander Dieleman 編寫並維護。Lasagne 並非是根據符號變數之間的函式關係來指定網路模型,而是允許使用者在層級思考,為使用者提供了例如「Conv2DLayer」和「DropoutLayer」的構建塊。Lasagne 在犧牲了很少的靈活性的同時,提供了豐富的公共元件來幫助圖層定義、圖層初始化、模型正則化、模型監控和模型訓練。


優點:


  • 仍舊非常靈活

  • 比 Theano 更高階的抽象

  • 文件和程式碼中包含了各種 Pasta Puns


缺點:


  • 社群小


Blocks


連結:https://github.com/mila-udem/blocks


 描述:用於構建和訓練神經網路的 Theano 框架


文件:http://blocks.readthedocs.io/en/latest/


概述:與 Lasagne 類似,Blocks 是在 Theano 頂部新增一個抽象層使深度學習模型比編寫原始的 Theano 更清晰、更簡單、定義更加標準化。它是由蒙特利爾大學機器學習研究所(MILA)編寫,其中一些人為搭建 Theano 和第一個神經網路定義的高階介面(已經淘汰的 PyLearn2)貢獻了自己的一份力量。比起 Lasagne,Blocks 靈活一點,代價是入門臺階較高,想要高效的使用它有不小的難度。除此之外,Blocks 對遞迴神經網路架構(recurrent neural network architectures)有很好的支援,所以如果你有興趣探索這種型別的模型,它值得一看。除了 TensorFlow,對於許多我們已經部署在 indico 產品中的 API,Blocks 是其首選庫。


優點:


  • 仍舊非常靈活

  • 比 Theano 更高階的抽象

  • 易於測試


缺點:


  • 較高的學習難度

  • 更小的社群


TensorFlow


連結:https://github.com/tensorflow/tensorflow


描述:用於數值計算的使用資料流圖的開源軟體庫


文件:https://www.tensorflow.org/api_docs/python/


概述:TensorFlow 是較低階別的符號庫(比如 Theano)和較高階別的網路規範庫(比如 Blocks 和 Lasagne)的混合。即使它是 Python 深度學習庫集合的最新成員,在 Google Brain 團隊支援下,它可能已經是最大的活躍社群了。它支援在多 GPUs 上執行深度學習模型,為高效的資料流水線提供使用程式,並具有用於模型的檢查,視覺化和序列化的內建模組。最近,TensorFlow 團隊決定支援 Keras(我們列表中下一個深度學習庫)。雖然 TensorFlow 有著自己的缺點,但是社群似乎同意這一決定,社群的龐大規模和專案背後巨大的動力意味著學習 TensorFlow 是一次安全的賭注。因此,TensorFlow 是我們今天在 indico 選擇的深度學習庫。


優點:


  • 由軟體巨頭 Google 支援

  • 非常大的社群

  • 低階和高階介面網路訓練

  • 比基於 Theano 配置更快的模型編譯

  • 完全地多 GPU 支援


缺點:


  • 雖然 Tensorflow 正在追趕,但是最初在許多基準上比基於 Theano 的慢。

  • RNN 支援仍不如 Theano


Keras


連結:https://github.com/fchollet/keras


描述:Python 的深度學習庫。支援 Convnets、遞迴神經網路等。在 Theano 或者 TensorFlow 上執行。


文件:https://keras.io/


概述:Keras 也許是水平最高,對使用者最友好的庫了。由 Francis Chollet(Google Brain 團隊中的另一個成員)編寫和維護。它允許使用者選擇其所構建的模型是在 Theano 上或是在 TensorFlow 上的符號圖上執行。Keras 的使用者介面受啟發於 Torch,所以如果你以前有過使用 Lua 語言的機器學習經驗,Keras 絕對值得一看。由於部分非常優秀的文件和其相對易用性,Keras 的社群非常大並且非常活躍。最近,TensorFlow 團隊宣佈計劃與 Keras 一起支援內建,所以很快 Keras 將是 TensorFlow 專案的一個分組。


優點:


  • 可供選擇的 Theano 或者 TensorFlow 後端

  • 直觀、高階別的埠

  • 更易學習


缺點:


  • 不太靈活,比其他選擇更規範


MXNet


連結:https://github.com/dmlc/mxnet


描述:MXNet 是一個旨在提高效率和靈活性的深度學習框架。


文件:http://mxnet.io/api/python/index.html#python-api-reference


概述:MXNet 是亞馬遜(Amazon)選擇的深度學習庫,並且也許是最優秀的庫。它擁有類似於 Theano 和 TensorFlow 的資料流圖,為多 GPU 配置提供了良好的配置,有著類似於 Lasagne 和 Blocks 更高階別的模型構建塊,並且可以在你可以想象的任何硬體上執行(包括手機)。對 Python 的支援只是其冰山一角—MXNet 同樣提供了對 R、Julia、C++、Scala、Matlab,和 Javascript 的介面。如果你正在尋找最佳的效能,選擇 MXNet 吧,但是你必須願意處理與之相對的一些 MXNet 的怪癖。


優點:


  • 速度的標杆

  • 非常靈活


缺點:


  • 最小的社群

  • 比 Theano 更困難的學習難度


PyTorch


連結:https://github.com/pytorch/pytorch


描述:Python 中的張量(Tensors)和動態神經網路,有著強大的 GPU 加速。


文件:http://pytorch.org/docs/


概述:剛剛放出一段時間,PyTorch 就已經是我們 Python 深度學習框架列表中的一個新的成員了。它是從 Lua 的 Torch 庫到 Python 的鬆散埠,由於它由 Facebook 的 人工智慧研究團隊(Artificial Intelligence Research team (FAIR))支援且因為它用於處理動態計算圖(Theano,TensorFlow 或者其他衍生品沒有的特性,編譯者注:現在 TensorFlow 好像支援動態計算圖),它變得非常的有名。PyTorch 在 Python 深度學習生態系統將扮演怎樣的角色還不得而知,但所有的跡象都表明,PyTorch 是我們列表中其他框架的一個非常棒的選擇。


優點:


  • 來自 Facebook 組織的支援

  • 完全地對動態圖的支援

  • 高階和低階 API 的混合


缺點:


  • 比其他選擇,PyTorch 還不太成熟(用他們自己的話說—「我們正處於早期測試版本。期待一些冒險」)

  • 除了官方文件以外,只有有限的參考文獻/資源

相關文章