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

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

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

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

介紹

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

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

PyTorch於2016年10月釋出,是一款專注於直接使用陣列表示式的低階API。它在過去的一年裡備受矚目,成為學術研究的首選解決方案,以及需要最佳化自定義表示式的深度學習應用。由Facebook支援。

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

TL; DR:

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

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

為什麼不對比其他框架?

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

Keras對比PyTorch:易用性和靈活性

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

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

PyTorch為實驗提供了一個相對低階的環境,使使用者可以更自由地編寫自定義層並檢視數值最佳化任務的底層。當你可以使用Python的全部功能並訪問所使用的所有函式的核心時,可以更直接的開發更復雜的架構。當然,代價是程式碼冗長。

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

Keras

model = Sequential()model。add(Conv2D(32, (3, 3), activation=‘relu’, input_shape=(32, 32, 3)))model。add(MaxPool2D())model。add(Conv2D(16, (3, 3), activation=‘relu’))model。add(MaxPool2D())model。add(Flatten())model。add(Dense(10, activation=‘softmax’))

PyTorch

class Net(nn。Module): def __init__(self): super(Net, self)。__init__() self。conv1 = nn。Conv2d(3, 32, 3) self。conv2 = nn。Conv2d(32, 16, 3) self。fc1 = nn。Linear(16 * 6 * 6, 10) self。pool = nn。MaxPool2d(2, 2) def forward(self, x): x = self。pool(F。relu(self。conv1(x))) x = self。pool(F。relu(self。conv2(x))) x = x。view(-1, 16 * 6 * 6) x = F。log_softmax(self。fc1(x), dim=-1) return xmodel = Net()

上面的程式碼片段展示了兩種框架之間的差異。至於模型訓練本身 - 在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 - 更靈活,更容易深入理解深度學習概念

Keras對比PyTorch:人氣和可獲取學習資源

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

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

深度學習框架入門選擇,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:除錯與自省

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

PyTorch作為更為繁瑣的框架,可以讓我們逐行執行我們的指令碼。這就像除錯NumPy一樣 - 我們可以輕鬆訪問程式碼中的所有物件,並且可以使用列印語句(或其他標準的Python除錯)來檢視方法失敗的位置。

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

總結

PyTorch - 更好的除錯能力

Keras - 可能不太需要除錯簡單的網路

Keras對比PyTorch:匯出模型和跨平臺可移植性

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

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 - 更多的部署選項,更簡單的模型匯出。

KerasVSPyTorch:表現

唐納德·克努特的名言:

在程式中設計中,不成熟的最佳化方案是萬惡之源。

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

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

https://github。com/ilkarman/DeepLearningFrameworks/

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

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

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

總結

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

Keras對比PyTorch:最後結論

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

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

本文為ATYUN編譯作品,未經允許禁止轉載。ATYUN專注人工智慧。