自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Keras vs PyTorch:誰是「第一」深度學(xué)習(xí)框架?

開發(fā) 開發(fā)工具 深度學(xué)習(xí)
本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經(jīng)網(wǎng)絡(luò)在不同框架中性能的基準測試結(jié)果。

「***個深度學(xué)習(xí)框架該怎么選」對于初學(xué)者而言一直是個頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經(jīng)網(wǎng)絡(luò)在不同框架中性能的基準測試結(jié)果。目前在 GitHub 上,Keras 有超過 31,000 個 Stars,而晚些出現(xiàn)的 PyTorch 已有近 17,000 個 Stars。

值得一提的是,盡管在 4 月底 PyTorch 在 0.4 版本中已經(jīng)加入了對于 Windows 的支持,但其對比 Keras 與 TensorFlow 在 Windows 上的穩(wěn)定性還略有差距。

兩大框架的鏈接:

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

你想學(xué)習(xí)深度學(xué)習(xí)嗎?是要將深度學(xué)習(xí)應(yīng)用到業(yè)務(wù)中,還是用深度學(xué)習(xí)開展副業(yè),抑或只是為了得到一些適合市場需求的技能?無論目標是什么,選擇合適的深度學(xué)習(xí)框架是達到目標的***步。

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

一、簡介

Keras 和 PyTorch 是頗受數(shù)據(jù)科學(xué)家歡迎的深度學(xué)習(xí)開源框架。

  • Keras 是能夠在 TensorFlow、CNTK、Theano 或 MXNet 上運行的高級 API(或作為 TensorFlow 內(nèi)的 tf.contrib)。Keras 于 2015 年 3 月***發(fā)布,之后即因其易用性和語法簡潔性而受到支持,得到快速發(fā)展。Keras 是谷歌支持的一款框架。
  • PyTorch 于 2017 年 1 月對外發(fā)布,是專注于直接處理數(shù)組表達式的較低級別 API。去年它受到了大量關(guān)注,成為學(xué)術(shù)研究和需要優(yōu)化自定義表達式的深度學(xué)習(xí)應(yīng)用偏好的解決方案。它是 Facebook 支持的一款框架。

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

一句話總結(jié):Keras 更容易學(xué)習(xí)和用標準層進行實驗,即插即用;PyTorch 提供一種較低級別的方法,對于更具備數(shù)學(xué)背景的用戶來講靈活性更強。

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

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

三、Keras vs PyTorch:易用性和靈活性

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

Keras 是一個更高級別的框架,將常用的深度學(xué)習(xí)層和運算封裝進干凈、樂高大小的構(gòu)造塊,使數(shù)據(jù)科學(xué)家不用再考慮深度學(xué)習(xí)的復(fù)雜度。

PyTorch 提供一個相對較低級別的實驗環(huán)境,使用戶可以更加自由地寫自定義層、查看數(shù)值優(yōu)化任務(wù)。當(dāng)你可以使用 Python 的全部能量,訪問使用的所有函數(shù)的核心,則復(fù)雜架構(gòu)的開發(fā)更加直接。這自然會以冗長為代價。

下面用在 Keras 和 PyTorch 中定義的簡單卷積網(wǎng)絡(luò)來對二者進行對比:

1. Keras

  1. model = Sequential() 
  2. model.add(Conv2D(32, (3, 3), activation='relu'input_shape=(32, 32, 3))) 
  3. model.add(MaxPool2D()) 
  4. model.add(Conv2D(16, (3, 3), activation='relu')) 
  5. model.add(MaxPool2D()) 
  6. model.add(Flatten()) 
  7. model.add(Dense(10, activation='softmax')) 

2. PyTorch

  1. class Net(nn.Module): 
  2.     def __init__(self): 
  3.         super(Net, self).__init__() 
  4.  
  5.         self.conv1 = nn.Conv2d(3, 32, 3) 
  6.         self.conv2 = nn.Conv2d(32, 16, 3) 
  7.         self.fc1 = nn.Linear(16 * 6 * 6, 10)  
  8.         self.pool = nn.MaxPool2d(2, 2) 
  9.  
  10.     def forward(self, x): 
  11.         x = self.pool(F.relu(self.conv1(x))) 
  12.         x = self.pool(F.relu(self.conv2(x))) 
  13.         xx = x.view(-1, 16 * 6 * 6) 
  14.         x = F.log_softmax(self.fc1(x), dim=-1) 
  15.  
  16.         return x 
  17.  
  18. model = Net() 

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

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

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

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

你的深度學(xué)習(xí)應(yīng)用所需的靈活性是否超出 Keras 能夠提供的靈活性值得考慮。根據(jù)你的需求,遵循 Rule of least power,Keras 可能是最***的解決方案。

3. 結(jié)論

  • Keras:更簡練,更簡單的 API
  • PyTorch:更靈活,鼓勵用戶更深入地理解深度學(xué)習(xí)概念

四、Keras vs PyTorch:流行度和可獲取學(xué)習(xí)資源

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

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

我們發(fā)現(xiàn)基于 Keras 的初學(xué)者深度學(xué)習(xí)課程要比基于 PyTorch 的課程簡單,這使得前者更容易受初學(xué)者喜歡。Keras 的代碼可讀性和***的易用性使它被深度學(xué)習(xí)愛好者、教師和實力派 Kaggle 冠軍廣泛使用。

偉大的 Keras 資源和深度學(xué)習(xí)課程示例,參見 Piotr Migdał寫的文章《Starting deep learning hands-on: image classification on CIFAR-10》,以及 Keras 創(chuàng)建者 François Chollet 寫的書《Deep Learning with Python》。至于 PyTorch 資源,我們推薦官方教程,提供了稍微更有挑戰(zhàn)性的綜合方法來學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的內(nèi)在工作原理。

結(jié)論

  • Keras:大量可獲取教程和可重用代碼
  • PyTorch:卓越的社區(qū)支持和活躍的開發(fā)

五、Keras vs PyTorch:debug 和內(nèi)省

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

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

Keras 用戶創(chuàng)建的標準網(wǎng)絡(luò)要比 PyTorch 用戶創(chuàng)建的標準網(wǎng)絡(luò)出錯的機率小一個數(shù)量級。但是一旦出錯,則損害巨大,且通常很難定位出錯的代碼行。PyTorch 提供更直接了當(dāng)?shù)?debug 經(jīng)驗,而無需關(guān)注模型復(fù)雜度。此外,當(dāng)你懷疑哪里出錯時,你可以查找 PyTorch repo 查看可讀代碼。

結(jié)論

  • PyTorch:debug 能力更強
  • Keras:debug 簡單網(wǎng)絡(luò)的需求的(潛在)頻率更低

六、Keras vs PyTorch:導(dǎo)出模型和跨平臺可移植性

在生產(chǎn)環(huán)境中,導(dǎo)出和部署自己訓(xùn)練的模型時有哪些選擇?

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

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

導(dǎo)出 PyTorch 模型的過程由于其 Python 代碼的限制而更加費力,目前人們廣泛采用的方法是首先使用 ONNX 將 PyTorch 模型轉(zhuǎn)換為 Caffe2 形式。

結(jié)論

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

七、Keras vs PyTorch:性能篇

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

在大多數(shù)情況下,基準測試中的速度差異不應(yīng)該成為框架選擇的主要標準——特別是在學(xué)習(xí)階段。GPU 時間比其數(shù)據(jù)科學(xué)家的時間顯然便宜得多。而且,在學(xué)習(xí)過程中,性能瓶頸大多是由失敗的實現(xiàn)、未優(yōu)化的網(wǎng)絡(luò)和數(shù)據(jù)加載造成的,而不是框架本身的運行速度。當(dāng)然,為了完整地進行比較,我們還是要介紹這一方面。在這里我們推薦兩個性能對比結(jié)果:

  • 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 一樣快,在循環(huán)神經(jīng)網(wǎng)絡(luò)上或許更快,相比之下,Keras 通常速度較慢。正如***篇文章的作者指出的那樣:大多數(shù)情況下,高性能框架(即 PyTorch 和 TensorFlow)的計算效率優(yōu)勢不敵快速開發(fā)環(huán)境以及 Keras 提供的實驗易用性。

結(jié)論:

  • 就訓(xùn)練速度而言,PyTorch 勝過 Keras

八、Keras vs PyTorch:對比總結(jié)

Keras 和 PyTorch 都是深度學(xué)習(xí)框架初學(xué)者非常棒的選擇。如果你是數(shù)學(xué)家、研究員或者想要理解模型的本質(zhì),那么可以考慮選擇 PyTorch。在需要更先進的定制化和 debug 時(例如用 YOLOv3 做目標檢測或者帶有注意力的 LSTM),或者當(dāng)我們需要優(yōu)化數(shù)組表達式而不是神經(jīng)網(wǎng)絡(luò)時(例如矩陣分解或者 word2vec 算法),PyTorch 真的很棒。

如果你想要一個即插即用的框架,Keras 無疑是更簡單的選擇:快速構(gòu)建、訓(xùn)練、評估模型,不需要在數(shù)學(xué)實現(xiàn)上花費太多的時間。

深度學(xué)習(xí)的核心概念知識是可轉(zhuǎn)移的。一旦你掌握了一個環(huán)境中的基礎(chǔ)知識,你就能學(xué)以致用,掌握新的深度學(xué)習(xí)庫。

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

原文鏈接:https://deepsense.ai/keras-or-pytorch/

【本文是51CTO專欄機構(gòu)“機器之心”的原創(chuàng)文章,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2019-06-26 05:29:44

深度學(xué)習(xí)KerasPyTorch

2022-01-06 10:04:17

深度學(xué)習(xí)編程人工智能

2020-05-14 14:45:33

深度學(xué)習(xí) PyTorch人工智能

2021-11-05 12:59:51

深度學(xué)習(xí)PytorchTenso

2022-11-25 07:35:57

PyTorchPython學(xué)習(xí)框架

2025-01-08 08:30:38

2021-12-29 07:09:43

React框架Vue

2018-10-15 10:08:53

程序員技能深度學(xué)習(xí)

2021-02-03 13:56:09

KerasAPI深度學(xué)習(xí)

2017-03-01 09:05:27

PyTorchPython框架

2022-09-21 10:40:57

TensorFlowPyTorchJAX

2017-10-30 13:34:22

深度學(xué)習(xí)KerasAPI

2017-03-06 15:25:47

PyTorchMxnet深度學(xué)習(xí)

2019-09-01 19:19:04

TensorFlowPyTorch深度學(xué)習(xí)

2020-08-21 10:54:55

5G第一城基礎(chǔ)設(shè)施建設(shè)

2013-02-21 13:18:32

2012-07-17 09:41:20

微軟谷歌Office

2009-11-30 15:57:18

VS2003 MFC

2020-03-20 14:33:29

人工智能深度學(xué)習(xí)技術(shù)

2022-04-28 10:24:15

FirefoxLibreWolf瀏覽器
點贊
收藏

51CTO技術(shù)棧公眾號