溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進行Keras vs PyTorch框架比較

發(fā)布時間:2021-12-24 16:24:57 來源:億速云 閱讀:160 作者:柒染 欄目:服務(wù)器

如何進行Keras vs PyTorch框架比較,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在 Keras 與 PyTorch 的對比中,作者還給出了相同神經(jīng)網(wǎng)絡(luò)在不同框架中性能的基準(zhǔn)測試結(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è),抑或只是為了得到一些適合市場需求的技能?無論目標(biāo)是什么,選擇合適的深度學(xué)習(xí)框架是達到目標(biāo)的第一步。

我們強烈建議你選擇 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í)和用標(biāo)準(zhǔn)層進行實驗,即插即用;PyTorch 提供一種較低級別的方法,對于更具備數(shù)學(xué)背景的用戶來講靈活性更強。

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

本文不討論選擇 TensorFlow 作為首選深度學(xué)習(xí)框架的優(yōu)劣勢,因為我們認(rèn)為 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

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'))

2. 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))) xx = x.view(-1, 16 * 6 * 6) x = F.log_softmax(self.fc1(x), dim=-1) return x 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 競賽中,最優(yōu)秀的 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 語句(或任何標(biāo)準(zhǔn) Python debug 語句)查看有問題的代碼。

Keras 用戶創(chuàng)建的標(biāo)準(zhǔn)網(wǎng)絡(luò)要比 PyTorch 用戶創(chuàng)建的標(biāo)準(zhǔn)網(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ù)情況下,基準(zhǔn)測試中的速度差異不應(yīng)該成為框架選擇的主要標(biāo)準(zhǔn)——特別是在學(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 提供的實驗易用性。

如何進行Keras vs PyTorch框架比較

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

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

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

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI