摘要:第一個(gè)深度學(xué)習(xí)框架該怎么選對于初學(xué)者而言一直是個(gè)頭疼的問題。簡介和是頗受數(shù)據(jù)科學(xué)家歡迎的深度學(xué)習(xí)開源框架。就訓(xùn)練速度而言,勝過對比總結(jié)和都是深度學(xué)習(xí)框架初學(xué)者非常棒的選擇。
「第一個(gè)深度學(xué)習(xí)框架該怎么選」對于初學(xué)者而言一直是個(gè)頭疼的問題。本文中,來自 deepsense.ai 的研究員給出了他們在高級框架上的答案。在 Keras 與 PyTorch 的對比中,作者還給出了相同神經(jīng)網(wǎng)絡(luò)在不同框架中性能的基準(zhǔn)測試結(jié)果。目前在 GitHub 上,Keras 有超過 31,000 個(gè) Stars,而晚些出現(xiàn)的 PyTorch 已有近 17,000 個(gè) 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í)框架是達(dá)到目標(biāo)的第一步。
我們強(qiáng)烈建議你選擇 Keras 或 PyTorch。它們都是非常強(qiáng)大的工具,且不管是學(xué)習(xí)還是實(shí)驗(yàn)都很有樂趣。我們是從教師和學(xué)生的角度考慮的。本文作者 Piotr 在企業(yè)舉辦過 Keras 和 PyTorch 研討會(huì),Rafa ? 則正在學(xué)習(xí)這兩種框架。
簡介
Keras 和 PyTorch 是頗受數(shù)據(jù)科學(xué)家歡迎的深度學(xué)習(xí)開源框架。
Keras 是能夠在 TensorFlow、CNTK、Theano 或 MXNet 上運(yùn)行的高級 API(或作為 TensorFlow 內(nèi)的 tf.contrib)。Keras 于 2015 年 3 月首次發(fā)布,之后即因其易用性和語法簡潔性而受到支持,得到快速發(fā)展。Keras 是谷歌支持的一款框架。
PyTorch 于 2017 年 1 月對外發(fā)布,是專注于直接處理數(shù)組表達(dá)式的較低級別 API。去年它受到了大量關(guān)注,成為學(xué)術(shù)研究和需要優(yōu)化自定義表達(dá)式的深度學(xué)習(xí)應(yīng)用偏好的解決方案。它是 Facebook 支持的一款框架。
在討論二者的具體細(xì)節(jié)之前,我們想先說明:對于「哪一個(gè)框架更好」這個(gè)問題我們沒有直接明了的答案。選擇哪一個(gè)框架最終取決于你的技術(shù)背景、需求和期望。本文旨在幫助你更好地了解何時(shí)應(yīng)該選擇 Keras 或 PyTorch。
一句話總結(jié)
Keras 更容易學(xué)習(xí)和用標(biāo)準(zhǔn)層進(jìn)行實(shí)驗(yàn),即插即用;PyTorch 提供一種較低級別的方法,對于更具備數(shù)學(xué)背景的用戶來講靈活性更強(qiáng)。
所以說為何不用其他框架呢?
本文不討論選擇 TensorFlow 作為推薦深度學(xué)習(xí)框架的優(yōu)劣勢,因?yàn)槲覀冋J(rèn)為 TensorFlow 與 Keras(TensorFlow 的官方高級庫)和 PyTorch 相比對于新手不夠友好。盡管你可以找到一些 Theano 教程,但它已不再處于活躍開發(fā)狀態(tài)。Caffe 缺少靈活性,Torch 使用 Lua 語言(然而其重寫非常難 : ) )。MXNet、Chainer 和 CNTK 目前應(yīng)用不那么廣泛。
Keras vs PyTorch:易用性和靈活性
Keras 和 PyTorch 的運(yùn)行抽象層次不同。
Keras 是一個(gè)更高級別的框架,將常用的深度學(xué)習(xí)層和運(yùn)算封裝進(jìn)干凈、樂高大小的構(gòu)造塊,使數(shù)據(jù)科學(xué)家不用再考慮深度學(xué)習(xí)的復(fù)雜度。
PyTorch 提供一個(gè)相對較低級別的實(shí)驗(yàn)環(huán)境,使用戶可以更加自由地寫自定義層、查看數(shù)值優(yōu)化任務(wù)。當(dāng)你可以使用 Python 的全部能量,訪問使用的所有函數(shù)的核心,則復(fù)雜架構(gòu)的開發(fā)更加直接。這自然會(huì)以冗長為代價(jià)。
下面用在 Keras 和 PyTorch 中定義的簡單卷積網(wǎng)絡(luò)來對二者進(jìn)行對比:
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 ? x
model ? = ? Net ( )
上述代碼片段顯示了兩個(gè)框架的些微不同。至于模型訓(xùn)練,它在 PyTorch 中需要大約 20 行代碼,而在 Keras 中只需要一行。GPU 加速在 Keras 中可以進(jìn)行隱式地處理,而 PyTorch 需要我們指定何時(shí)在 CPU 和 GPU 間遷移數(shù)據(jù)。
如果你是新手,那么 Keras 作為更高級別的框架可能具備明顯優(yōu)勢。Keras 確實(shí)可讀性更強(qiáng),更加簡練,允許用戶跳過一些實(shí)現(xiàn)細(xì)節(jié),更快地構(gòu)建自己的第一個(gè)端到端深度學(xué)習(xí)模型。但是,忽略這些細(xì)節(jié)會(huì)限制用戶探索深度學(xué)習(xí)流程中每個(gè)計(jì)算模塊內(nèi)在工作原理的機(jī)會(huì)。使用 PyTorch 會(huì)提供更多機(jī)會(huì),來更深入地思考深度學(xué)習(xí)核心概念,如反向傳播以及其他訓(xùn)練過程。
也就是說,Keras 雖然比 PyTorch 簡單得多,但它絕不是「玩具」,它是初學(xué)者以及經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家使用的正經(jīng)深度學(xué)習(xí)工具。
例如,在 DSTL 衛(wèi)星圖像特征檢測 Kaggle 競賽中,最優(yōu)秀的 3 支隊(duì)伍的解決方案都使用了 Keras,第四名(deepsense.ai 隊(duì)伍)使用了 PyTorch 和 Keras。
你的深度學(xué)習(xí)應(yīng)用所需的靈活性是否超出 Keras 能夠提供的靈活性值得考慮。根據(jù)你的需求,遵循 Rule of least power,Keras 可能是最完美的解決方案。
結(jié)論
Keras:更簡練,更簡單的 API
PyTorch:更靈活,鼓勵(lì)用戶更深入地理解深度學(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é)工具。
盡管兩個(gè)框架的文檔都比較好,但是 PyTorch 的社區(qū)支持更強(qiáng)大:其討論板很值得訪問,其中能找到你在文檔或 StackOverflow 中找不到的答案。
我們發(fā)現(xiàn)基于 Keras 的初學(xué)者深度學(xué)習(xí)課程要比基于 PyTorch 的課程簡單,這使得前者更容易受初學(xué)者喜歡。Keras 的代碼可讀性和無與倫比的易用性使它被深度學(xué)習(xí)愛好者、教師和實(shí)力派 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)在工作原理。
Keras:大量可獲取教程和可重用代碼
PyTorch:卓越的社區(qū)支持和活躍的開發(fā)
Keras vs PyTorch:debug 和內(nèi)省
Keras 封裝了大量計(jì)算模塊,這使得確定導(dǎo)致問題的代碼較為困難。
相比起來,PyTorch 更加詳細(xì),我們可以逐行執(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ò)出錯(cuò)的機(jī)率小一個(gè)數(shù)量級。但是一旦出錯(cuò),則損害巨大,且通常很難定位出錯(cuò)的代碼行。PyTorch 提供更直接了當(dāng)?shù)?debug 經(jīng)驗(yàn),而無需關(guān)注模型復(fù)雜度。此外,當(dāng)你懷疑哪里出錯(cuò)時(shí),你可以查找 PyTorch repo 查看可讀代碼。
結(jié)論
PyTorch:debug 能力更強(qiáng)
Keras:debug 簡單網(wǎng)絡(luò)的需求的(潛在)頻率更低
Keras vs PyTorch:導(dǎo)出模型和跨平臺(tái)可移植性
在生產(chǎn)環(huán)境中,導(dǎo)出和部署自己訓(xùn)練的模型時(shí)有哪些選擇?
PyTorch 將模型保存在 Pickles 中,Pickles 基于 Python,且不可移植,而 Keras 利用 JSON + H5 文件格式這種更安全的方法(盡管在 Keras 中保存自定義層通常更困難)。另一方面,Keras 也有 R 語言接口,如果你合作的數(shù)據(jù)分析師團(tuán)隊(duì)使用 R 語言,那么你會(huì)用得上它。
Keras 是在 TensorFlow 上運(yùn)行的,這意味著它可以通過 TensorFlow for Mobile 和 TensorFlow Lite 享有更多選擇來部署到移動(dòng)平臺(tái)。你編寫的 web 應(yīng)用也可以通過 TensorFlow.js 或 Keras.js 部署到網(wǎng)頁上。例如,你可以看看這個(gè)深度學(xué)習(xí)驅(qū)動(dòng)的瀏覽器插件,它可以檢測密集恐懼癥觸發(fā)因素:https://github.com/cytadela8/trypophobia。
導(dǎo)出 PyTorch 模型的過程由于其 Python 代碼的限制而更加費(fèi)力,目前人們廣泛采用的方法是首先使用 ONNX 將 PyTorch 模型轉(zhuǎn)換為 Caffe2 形式。
Keras 獲勝:它有更多的部署選項(xiàng)(直接通過 TensorFlow 后端),模型導(dǎo)出也更簡單。
Keras vs PyTorch:性能篇
Donald Knuth 有一句名言:不成熟的優(yōu)化是編程中所有邪惡(至少大部分)的根源。
在大多數(shù)情況下,基準(zhǔn)測試中的速度差異不應(yīng)該成為框架選擇的主要標(biāo)準(zhǔn)——特別是在學(xué)習(xí)階段。GPU 時(shí)間比其數(shù)據(jù)科學(xué)家的時(shí)間顯然便宜得多。而且,在學(xué)習(xí)過程中,性能瓶頸大多是由失敗的實(shí)現(xiàn)、未優(yōu)化的網(wǎng)絡(luò)和數(shù)據(jù)加載造成的,而不是框架本身的運(yùn)行速度。當(dāng)然,為了完整地進(jìn)行比較,我們還是要介紹這一方面。在這里我們推薦兩個(gè)性能對比結(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)的計(jì)算效率優(yōu)勢不敵快速開發(fā)環(huán)境以及 Keras 提供的實(shí)驗(yàn)易用性。
就訓(xùn)練速度而言,PyTorch 勝過 Keras
Keras vs PyTorch:對比總結(jié)
Keras 和 PyTorch 都是深度學(xué)習(xí)框架初學(xué)者非常棒的選擇。如果你是數(shù)學(xué)家、研究員或者想要理解模型的本質(zhì),那么可以考慮選擇 PyTorch。在需要更先進(jìn)的定制化和 debug 時(shí)(例如用 YOLOv3 做目標(biāo)檢測或者帶有注意力的 LSTM ) ,或者當(dāng)我們需要優(yōu)化數(shù)組表達(dá)式而不是神經(jīng)網(wǎng)絡(luò)時(shí)(例如矩陣分解或者 word2vec 算法),PyTorch 真的很棒。
如果你想要一個(gè)即插即用的框架,Keras 無疑是更簡單的選擇:快速構(gòu)建、訓(xùn)練、評估模型,不需要在數(shù)學(xué)實(shí)現(xiàn)上花費(fèi)太多的時(shí)間。
深度學(xué)習(xí)的核心概念知識(shí)是可轉(zhuǎn)移的。一旦你掌握了一個(gè)環(huán)境中的基礎(chǔ)知識(shí),你就能學(xué)以致用,掌握新的深度學(xué)習(xí)庫。
我們鼓勵(lì)你在 Keras 和 PyTorch 中都嘗試下簡單的深度學(xué)習(xí)模型。
原文鏈接:https://deepsense.ai/keras-or-pytorch/
聲明:文章收集于網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系小編及時(shí)處理,謝謝!
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/4790.html
摘要:但年月,宣布將在年終止的開發(fā)和維護(hù)。性能并非最優(yōu),為何如此受歡迎粉絲團(tuán)在過去的幾年里,出現(xiàn)了不同的開源深度學(xué)習(xí)框架,就屬于其中典型,由谷歌開發(fā)和支持,自然引發(fā)了很大的關(guān)注。 Keras作者Fran?ois Chollet剛剛在Twitter貼出一張圖片,是近三個(gè)月來arXiv上提到的深度學(xué)習(xí)開源框架排行:TensorFlow排名第一,這個(gè)或許并不出意外,Keras排名第二,隨后是Caffe、...
摘要:我認(rèn)為對機(jī)器學(xué)習(xí)開發(fā)者來說,是一個(gè)了不起的工具集。這個(gè)帖子發(fā)出后得到了很多機(jī)器學(xué)習(xí)研究者和開發(fā)者的關(guān)注,他們紛紛跟貼談?wù)撟约旱南敕ê徒?jīng)驗(yàn)不只是關(guān)于和,討論中還涉及到更多工具。 Theano、TensorFlow、Torch、MXNet 再到近日比較熱門的 PyTorch 等等,深度學(xué)習(xí)框架之間的比較一直以來都是非常受人關(guān)注的熱點(diǎn)話題。機(jī)器之心也曾發(fā)表過多篇相關(guān)的介紹和對比文章,如《主流深度學(xué)...
摘要:是微軟開源的用于不同深度學(xué)習(xí)框架和的模型之間互相轉(zhuǎn)換的工具,通過模型的中間表示來完成不同框架模型之間的轉(zhuǎn)換。 MMdnn簡介在工業(yè)街和學(xué)術(shù)界中,開發(fā)者或者研究人員可以選擇多種深度學(xué)習(xí)框架來構(gòu)建模型,每種框架有自己特有的網(wǎng)絡(luò)結(jié)構(gòu)定義以及模型保存格式,這種框架之間的鴻溝阻礙了不同框架模型之間的操作。MMdnn是微軟開源的用于不同深度學(xué)習(xí)框架(Caffe, Keras, MXNet, Tensor...
摘要:我們對種用于數(shù)據(jù)科學(xué)的開源深度學(xué)習(xí)庫作了排名。于年月發(fā)布了第名,已經(jīng)躋身于深度學(xué)習(xí)庫的上半部分。是最流行的深度學(xué)習(xí)前端第位是排名較高的非框架庫。頗受對數(shù)據(jù)集使用深度學(xué)習(xí)的數(shù)據(jù)科學(xué)家的青睞。深度學(xué)習(xí)庫的完整列表來自幾個(gè)來源。 我們對23種用于數(shù)據(jù)科學(xué)的開源深度學(xué)習(xí)庫作了排名。這番排名基于權(quán)重一樣大小的三個(gè)指標(biāo):Github上的活動(dòng)、Stack Overflow上的活動(dòng)以及谷歌搜索結(jié)果。排名結(jié)果...
摘要:幸運(yùn)的是,這些正是深度學(xué)習(xí)所需的計(jì)算類型。幾乎可以肯定,英偉達(dá)是目前執(zhí)行深度學(xué)習(xí)任務(wù)較好的選擇。今年夏天,發(fā)布了平臺(tái)提供深度學(xué)習(xí)支持。該工具適用于主流深度學(xué)習(xí)庫如和。因?yàn)榈暮啙嵑蛷?qiáng)大的軟件包擴(kuò)展體系,它目前是深度學(xué)習(xí)中最常見的語言。 深度學(xué)習(xí)初學(xué)者經(jīng)常會(huì)問到這些問題:開發(fā)深度學(xué)習(xí)系統(tǒng),我們需要什么樣的計(jì)算機(jī)?為什么絕大多數(shù)人會(huì)推薦英偉達(dá) GPU?對于初學(xué)者而言哪種深度學(xué)習(xí)框架是較好的?如何將...
閱讀 2360·2023-04-25 19:27
閱讀 3491·2021-11-24 09:39
閱讀 3905·2021-10-08 10:17
閱讀 3397·2019-08-30 13:48
閱讀 1930·2019-08-29 12:26
閱讀 3120·2019-08-28 17:52
閱讀 3537·2019-08-26 14:01
閱讀 3533·2019-08-26 12:19