當前位置:
首頁 > 知識 > Keras vs PyTorch:誰是「第一」深度學習框架?

Keras vs PyTorch:誰是「第一」深度學習框架?

選自Deepsense.ai

作者:Rafa? Jakubanis、Piotr Migdal

機器之心編譯

參與:路、李澤南、李亞洲

「第一個深度學習框架該怎麼選」對於初學者而言一直是個頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經網路在不同框架中性能的基準測試結果。目前在 GitHub 上,Keras 有超過 31,000 個 Stars,而晚些出現的 PyTorch 已有近 17,000 個 Stars。

值得一提的是,儘管在 4 月底 PyTorch 在 0.4 版本中已經加入了對於 Windows 的支持,但其對比 Keras 與 TensorFlow 在 Windows 上的穩定性還略有差距。

兩大框架的鏈接:

Keras:https://github.com/keras-team/keras (https://keras.io/)

PyTorch:https://github.com/pytorch/pytorch

你想學習深度學習嗎?是要將深度學習應用到業務中,還是用深度學習開展副業,抑或只是為了得到一些適合市場需求的技能?無論目標是什麼,選擇合適的深度學習框架是達到目標的第一步。

我們強烈建議你選擇 Keras 或 PyTorch。它們都是非常強大的工具,且不管是學習還是實驗都很有樂趣。我們是從教師和學生的角度考慮的。本文作者 Piotr 在企業舉辦過 Keras 和 PyTorch 研討會,Rafa?則正在學習這兩種框架。

簡介

Keras 和 PyTorch 是頗受數據科學家歡迎的深度學習開源框架。

Keras 是能夠在 TensorFlow、CNTK、Theano 或 MXNet 上運行的高級 API(或作為 TensorFlow 內的 tf.contrib)。Keras 於 2015 年 3 月首次發布,之後即因其易用性和語法簡潔性而受到支持,得到快速發展。Keras 是谷歌支持的一款框架。

PyTorch 於2017 年 1 月對外發布,是專註於直接處理數組表達式的較低級別 API。去年它受到了大量關注,成為學術研究和需要優化自定義表達式的深度學習應用偏好的解決方案。它是 Facebook 支持的一款框架。

在討論二者的具體細節之前,我們想先說明:對於「哪一個框架更好」這個問題我們沒有直接明了的答案。選擇哪一個框架最終取決於你的技術背景、需求和期望。本文旨在幫助你更好地了解何時應該選擇 Keras 或 PyTorch。

一句話總結

Keras 更容易學習和用標準層進行實驗,即插即用;PyTorch 提供一種較低級別的方法,對於更具備數學背景的用戶來講靈活性更強。

所以說為何不用其他框架呢?

本文不討論選擇 TensorFlow 作為首選深度學習框架的優劣勢,因為我們認為 TensorFlow 與 Keras(TensorFlow 的官方高級庫)和 PyTorch 相比對於新手不夠友好。儘管你可以找到一些 Theano 教程,但它已不再處於活躍開發狀態。Caffe 缺少靈活性,Torch 使用 Lua 語言(然而其重寫非常難:))。MXNet、Chainer 和 CNTK 目前應用不那麼廣泛。

Keras vs PyTorch:易用性和靈活性

Keras 和 PyTorch 的運行抽象層次不同。

Keras 是一個更高級別的框架,將常用的深度學習層和運算封裝進乾淨、樂高大小的構造塊,使數據科學家不用再考慮深度學習的複雜度。

PyTorch 提供一個相對較低級別的實驗環境,使用戶可以更加自由地寫自定義層、查看數值優化任務。當你可以使用 Python 的全部能量,訪問使用的所有函數的核心,則複雜架構的開發更加直接。這自然會以冗長為代價。

下面用在 Keras 和 PyTorch 中定義的簡單卷積網路來對二者進行對比:

Keras

PyTorch

上述代碼片段顯示了兩個框架的些微不同。至於模型訓練,它在 PyTorch 中需要大約 20 行代碼,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以進行隱式地處理,而 PyTorch 需要我們指定何時在 CPU 和 GPU 間遷移數據。

如果你是新手,那麼 Keras 作為更高級別的框架可能具備明顯優勢。Keras 確實可讀性更強,更加簡練,允許用戶跳過一些實現細節,更快地構建自己的第一個端到端深度學習模型。但是,忽略這些細節會限制用戶探索深度學習流程中每個計算模塊內在工作原理的機會。使用 PyTorch 會提供更多機會,來更深入地思考深度學習核心概念,如反向傳播以及其他訓練過程。

也就是說,Keras 雖然比 PyTorch 簡單得多,但它絕不是「玩具」,它是初學者以及經驗豐富的數據科學家使用的正經深度學習工具。

例如,在 DSTL 衛星圖像特徵檢測 Kaggle 競賽中,最優秀的 3 支隊伍的解決方案都使用了 Keras,第四名(deepsense.ai 隊伍)使用了 PyTorch 和 Keras。

你的深度學習應用所需的靈活性是否超出 Keras 能夠提供的靈活性值得考慮。根據你的需求,遵循 Rule of least power,Keras 可能是最完美的解決方案。

結論

Keras:更簡練,更簡單的 API

PyTorch:更靈活,鼓勵用戶更深入地理解深度學習概念

Keras vs PyTorch:流行度和可獲取學習資源

框架流行度不僅代表了易用性,社區支持也很重要——教程、代碼庫和討論組。截至 2018 年 6 月,Keras 和 PyTorch 的流行度不斷增長,不管是 GitHub 還是 arXiv 論文(注意大部分提及 Keras 的論文也提到它的 TensorFlow 後端)。根據 KDnuggets 調查,Keras 和 PyTorch 是增長最快的數據科學工具。

儘管兩個框架的文檔都比較好,但是 PyTorch 的社區支持更強大:其討論板很值得訪問,其中能找到你在文檔或 StackOverflow 中找不到的答案。

我們發現基於 Keras 的初學者深度學習課程要比基於 PyTorch 的課程簡單,這使得前者更容易受初學者喜歡。Keras 的代碼可讀性和無與倫比的易用性使它被深度學習愛好者、教師和實力派 Kaggle 冠軍廣泛使用。

偉大的 Keras 資源和深度學習課程示例,參見 Piotr Migda?寫的文章《Starting deep learning hands-on: image classification on CIFAR-10》,以及 Keras 創建者 Fran?ois Chollet 寫的書《Deep Learning with Python》。至於 PyTorch 資源,我們推薦官方教程,提供了稍微更有挑戰性的綜合方法來學習神經網路的內在工作原理。

結論

Keras:大量可獲取教程和可重用代碼

PyTorch:卓越的社區支持和活躍的開發

Keras vs PyTorch:debug 和內省

Keras 封裝了大量計算模塊,這使得確定導致問題的代碼較為困難。

相比起來,PyTorch 更加詳細,我們可以逐行執行腳本。和 debug NumPy 類似,我們可以輕鬆訪問代碼中的所有對象,使用 print 語句(或任何標準 Python debug 語句)查看有問題的代碼。

Keras 用戶創建的標準網路要比 PyTorch 用戶創建的標準網路出錯的機率小一個數量級。但是一旦出錯,則損害巨大,且通常很難定位出錯的代碼行。PyTorch 提供更直接了當的 debug 經驗,而無需關注模型複雜度。此外,當你懷疑哪裡出錯時,你可以查找 PyTorch repo 查看可讀代碼。

結論

PyTorch:debug 能力更強

Keras:debug 簡單網路的需求的(潛在)頻率更低

Keras vs PyTorch:導出模型和跨平台可移植性

在生產環境中,導出和部署自己訓練的模型時有哪些選擇?

PyTorch 將模型保存在 Pickles 中,Pickles 基於 Python,且不可移植,而 Keras 利用 JSON + H5 文件格式這種更安全的方法(儘管在 Keras 中保存自定義層通常更困難)。另一方面,Keras 也有 R 語言介面,如果你合作的數據分析師團隊使用 R 語言,那麼你會用得上它。

Keras 是在 TensorFlow 上運行的,這意味著它可以通過 TensorFlow for Mobile 和 TensorFlow Lite 享有更多選擇來部署到移動平台。你編寫的 web 應用也可以通過 TensorFlow.js 或 Keras.js 部署到網頁上。例如,你可以看看這個深度學習驅動的瀏覽器插件,它可以檢測密集恐懼症觸發因素:https://github.com/cytadela8/trypophobia。

導出 PyTorch 模型的過程由於其 Python 代碼的限制而更加費力,目前人們廣泛採用的方法是首先使用 ONNX 將 PyTorch 模型轉換為 Caffe2 形式。

結論

Keras 獲勝:它有更多的部署選項(直接通過 TensorFlow 後端),模型導出也更簡單。

Keras vs PyTorch:性能篇

Donald Knuth 有一句名言:不成熟的優化是編程中所有邪惡(至少大部分)的根源。

在大多數情況下,基準測試中的速度差異不應該成為框架選擇的主要標準——特別是在學習階段。GPU 時間比其數據科學家的時間顯然便宜得多。而且,在學習過程中,性能瓶頸大多是由失敗的實現、未優化的網路和數據載入造成的,而不是框架本身的運行速度。當然,為了完整地進行比較,我們還是要介紹這一方面。在這裡我們推薦兩個性能對比結果:

Wojtek Rosiński 的《TensorFlow, Keras and PyTorch Comparison》:https://wrosinski.github.io/deep-learning-frameworks/

微軟的《Comparing Deep Learning Frameworks: A Rosetta Stone Approach》:https://github.com/ilkarman/DeepLearningFrameworks/

PyTorch 和 TensorFlow 一樣快,在循環神經網路上或許更快,相比之下,Keras 通常速度較慢。正如第一篇文章的作者指出的那樣:大多數情況下,高性能框架(即 PyTorch 和 TensorFlow)的計算效率優勢不敵快速開發環境以及 Keras 提供的實驗易用性。

結論

就訓練速度而言,PyTorch 勝過 Keras

Keras vs PyTorch:對比總結

Keras 和 PyTorch 都是深度學習框架初學者非常棒的選擇。如果你是數學家、研究員或者想要理解模型的本質,那麼可以考慮選擇 PyTorch。在需要更先進的定製化和 debug 時(例如用 YOLOv3 做目標檢測或者帶有注意力的 LSTM),或者當我們需要優化數組表達式而不是神經網路時(例如矩陣分解或者 word2vec 演算法),PyTorch 真的很棒。

如果你想要一個即插即用的框架,Keras 無疑是更簡單的選擇:快速構建、訓練、評估模型,不需要在數學實現上花費太多的時間。

深度學習的核心概念知識是可轉移的。一旦你掌握了一個環境中的基礎知識,你就能學以致用,掌握新的深度學習庫。

我們鼓勵你在 Keras 和 PyTorch 中都嘗試下簡單的深度學習模型。

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

------------------------------------------------

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

DeepMind首次披露旗下AI專利申請情況,引發熱議
自然語言處理全家福:縱覽當前NLP中的任務、數據、模型與論文

TAG:機器之心 |