當前位置:
首頁 > 最新 > 深度學習框架入門選擇,Keras還是PyTorch?

深度學習框架入門選擇,Keras還是PyTorch?

AiTechYun

編輯:yxy

你是否希望能夠學習深度學習?你是想將其應用於商業,以此為基礎建立你的下一個項目,還是僅僅是增加自己的職場價值?無論如何,選擇合適的深度學習框架進行學習都是關鍵的、能夠更好實現目標的第一步。

我們強烈建議你選擇Keras或PyTorch。它們是強大的工具,不論你的用途是學習還是實驗,都會用的很舒服。

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

Keras是一種能夠在TensorFlow、CNTK、Theano或MXNet(或者在TensorFlow中運行tf.contrib)上運行的高級API。自2015年3月首次發布以來,它因易於使用和語法簡單而備受青睞,使開發更加快速。由Google的支持。

PyTorch於2016年10月發布,是一款專註於直接使用數組表達式的低級API。它在過去的一年裡備受矚目,成為學術研究的首選解決方案,以及需要優化自定義表達式的深度學習應用。由Facebook支持。

在我們討論這兩個框架的細節之前,我們首先要告訴你,對於「它們哪個更好?」的這個問題,並沒有一個固定的答案。你的最終選擇取決於你的技術背景,需求和期望。本文旨在讓你更好地了解選擇哪個作為第一個框架更為合適。


本著即插即用的精神,Keras可能更容易進入標準層並進行實驗。

PyTorch為更傾向數學的用戶提供了更低層的方法和更多的靈活性。


本文不去討論選擇純TensorFlow作為第一個深度學習框架的優缺點,因為我們認為與Keras(TF的官方高級庫)和PyTorch相比,它不太適合初學者。雖然你也可能會找一些Theano教程,但它已經不再繼續開發。Caffe缺乏靈活性,而Torch使用Lua(雖然它的重寫很棒:))。MXNet,Chainer和CNTK目前尚未廣泛流行。


Keras和PyTorch在操作抽象級別方面不同。

Keras是一個更高級的框架,將常用的深度學習層和操作包裝到簡潔的積木式的構建塊中,將深度學習的複雜性從數據科學家的眼前抽象出來。

PyTorch為實驗提供了一個相對低級的環境,使用戶可以更自由地編寫自定義層並查看數值優化任務的底層。當你可以使用Python的全部功能並訪問所使用的所有函數的內核時,可以更直接的開發更複雜的架構。當然,代價是代碼冗長。

我們思考一下,在Keras和PyTorch中定義一個簡單的卷積網路的詳細對比:

Keras

PyTorch

上面的代碼片段展示了兩種框架之間的差異。至於模型訓練本身 – 在PyTorch中需要大約20行代碼,而Keras只需一行代碼。啟用GPU加速在Keras中隱式處理,而PyTorch要求我們指定何時在CPU和GPU之間傳輸數據。

如果你是初學者,Keras的這種高級可能看起來是一個明顯的優勢。Keras確實更具可讀性和簡潔性,使你可以更快地構建自己的第一個端到端深度學習模型,同時跳過實現細節。然而,隱藏這些細節會限制了在深度學習過程中探索每個計算塊的內部運作的機會。使用PyTorch可以讓你更多的了解關於核心深度學習概念,如反向傳播和其他訓練過程。

也就是說,Keras比PyTorch簡單得多,但絕不是玩具 – 它初學者和經驗豐富的數據科學家都喜歡的一種嚴謹的深度學習工具。

以Kaggle競賽「 Dstl Satellite Imagery Feature Detection」為例,最好的三支隊伍在他們的解決方案中使用了Keras,deepsense.ai隊(第四名)使用了PyTorch和Keras(較少)的組合。

值得深思的是,你的深度學習應用是否需要比純Keras更強的靈活性。根據自己的需求,Keras可能最有效率。

總結

Keras – 更簡潔,更簡單的API

PyTorch – 更靈活,更容易深入理解深度學習概念


框架的普及度不僅是其可用性的代表。對於社區支持也很重要(教程、帶有可用代碼的資源庫和討論用戶)。截至2018年6月,Keras和PyTorch在GitHub和arXiv論文上都受到越來越多的歡迎(請注意,大多數提及Keras的論文也到了他的TensorFlow後端)。根據KDnuggets的調查,Keras和PyTorch是增長最快的數據科學工具。

雖然這兩個框架都有令人滿意的文檔,但PyTorch有更強大的社區支持,如果你遇到困難(你肯定會遇到)並且文檔或StackOverflow不能為你提供所需的答案,它們的討論板是解決你困惑的好地方。

有趣的是,我們發現,在給定的網路架構上具有注釋的初學者級別的深度學習課程中,Keras來說比PyTorch更容易說清楚,使初學者更容易理解前者。代碼的可讀性和Keras提供的無與倫比的實驗易用性可能會使其受到廣大深度學習愛好者,導師和老道的Kaggle獲獎者的廣泛歡迎。

關於好的Keras資源和深度學習課程的例子,請參閱下方鏈接(也可以看看keras作者Fran?ois Chollet寫的「Deep Learning with Python」)。

鏈接https://blog.deepsense.ai/deep-learning-hands-on-image-classification/

而對於PyTorch資源,我們推薦官方教程,它提供了一個更具挑戰性,更全面的方法來學習神經網路的內部運作。

總結

Keras – 可以很好地訪問教程和可重用代碼

PyTorch – 優秀的社區支持和積極的發展


Keras在抽象中封裝了大量計算塊,因此難以確定導致問題的確切的行。

PyTorch作為更為繁瑣的框架,可以讓我們逐行執行我們的腳本。這就像調試NumPy一樣 – 我們可以輕鬆訪問代碼中的所有對象,並且可以使用列印語句(或其他標準的Python調試)來查看方法失敗的位置。

創建正常網路的Keras用戶比PyTorch用戶出錯的機會少一個數量級。但一旦出現問題,就會很麻煩,而且通常很難找到出錯的代碼行。無論模型的複雜性如何,PyTorch都提供了更加直接的,更簡單的調試。此外,如果有疑問,你可以隨時查找PyTorch repo以查看其可讀代碼。

總結

PyTorch – 更好的調試能力

Keras – 可能不太需要調試簡單的網路


導出和部署訓練好的模型有哪些選擇?

PyTorch將模型保存為Pickles,基於Python且不可移植的,而Keras利用JSON + H5文件,有更安全的方法(儘管在Keras中保存自定義層通常更困難)。如果你需要使用R語言與數據分析師團隊進行協作,在R中也有Keras。

在Tensorflow上運行的keras通過TensorFlow for Mobile和TensorFlow Lite部署到移動平台。你可以使用TensorFlow.js或keras.js部署Web應用程序。例如:

https://github.com/cytadela8/trypophobia

由於由Python編碼導出PyTorch模型更加費力,目前廣泛推薦的方法是首先用ONNX將PyTorch模型轉換Caffe2。

總結

Keras – 更多的部署選項,更簡單的模型導出。


唐納德·克努特的名言:

在程序中設計中,不成熟的優化方案是萬惡之源。

在大多數情況下,以速度基準的差異不應該成為選擇框架的主要標準,特別是當它用於入門時。數據科學家的時間顯然比GPU時間寶貴得多。而且,在學習時,性能瓶頸一般由實驗失敗,網路未優化和數據載入造成; 不取決於原始的框架的速度。然而,為了完整的比較,我們不得不談到這個問題。我們推薦這兩個比較:

https://wrosinski.github.io/deep-learning-frameworks/

https://github.com/ilkarman/DeepLearningFrameworks/

PyTorch速度與TensorFlow一樣快,對於RNN可能更快。Keras一貫較慢。正如第一個比較的作者所指出的那樣,高性能框架(即PyTorch和TensorFlow)的計算效率的提高在大多數情況下,會被快速的開發環境和Keras提供的易用性所壓制。

總結

就訓練速度而言,PyTorch優於Keras

Keras和PyTorch都是第一個學習的深度學習框架的絕佳選擇。但是,如果你是一位數學家、研究人員或者傾向於理解你的模型真正在做什麼,那麼就考慮選擇PyTorch。在需要更高級的定製(及其調試)(例如,用YOLOv3或LSTM with attention的對象檢測),或者當我們需要優化除神經網路以外的數組表達式(例如,矩陣分解或word2vec演算法)時,它真的很出色。

如果你需要即插即用的框架,Keras毫無疑問是更簡單的選擇:構建快,訓練和評估模型也快,並且無需花費太多時間在數學實現細節上。

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

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


請您繼續閱讀更多來自 ATYUN訂閱號 的精彩文章:

網傳李飛飛將離開谷歌,谷歌官方回應:李飛飛計劃長期留任
中國Dove項目:新型無人機與鳥類極為相似

TAG:ATYUN訂閱號 |