深度學(xué)習(xí)工具選擇 | Keras VS PyTorch,還是?
當(dāng)你決定學(xué)習(xí)深度學(xué)習(xí)時(shí),有一個(gè)問(wèn)題會(huì)一直存在——學(xué)習(xí)哪種工具?深度學(xué)習(xí)有很多框架和庫(kù)。這篇文章對(duì)兩個(gè)流行庫(kù)Keras和Pytorch進(jìn)行了對(duì)比,因?yàn)槎叨己苋菀咨鲜?,初學(xué)者能夠輕松掌握。那么到底應(yīng)該選哪一個(gè)呢?本文分享了一個(gè)解決思路。
做出合適選擇的最佳方法是對(duì)每個(gè)框架的代碼樣式有一個(gè)概覽。開(kāi)發(fā)任何解決方案時(shí)首先也是最重要的事就是開(kāi)發(fā)工具。你必須在開(kāi)始一項(xiàng)工程之前設(shè)置好開(kāi)發(fā)工具。一旦開(kāi)始,就不能一直換工具了,否則會(huì)影響你的開(kāi)發(fā)效率。
作為初學(xué)者,你應(yīng)該多嘗試不同的工具,找到最適合你的那一個(gè)。但是當(dāng)你認(rèn)真開(kāi)發(fā)一個(gè)項(xiàng)目時(shí),這些事應(yīng)該提前計(jì)劃好。
每天都會(huì)有新的框架和工具投入市場(chǎng),而最好的工具能夠在定制和抽象之間做好平衡。工具應(yīng)該和你的思考方式和代碼樣式同步。因此要想找到適合自己的工具,首先你要多嘗試不同的工具。
我們同時(shí)用Keras和PyTorch訓(xùn)練一個(gè)簡(jiǎn)單的模型。如果你是深度學(xué)習(xí)初學(xué)者,對(duì)有些概念無(wú)法完全理解,不要擔(dān)心。從現(xiàn)在開(kāi)始,專(zhuān)注于這兩個(gè)框架的代碼樣式,盡量去想象哪個(gè)最適合你,使用哪個(gè)工具你最舒服,也最容易適應(yīng)。
這兩個(gè)工具最大的區(qū)別在于:PyTorch默認(rèn)為eager模式,而 Keras 基于TensorFlow和其他框架運(yùn)行(現(xiàn)在主要是 TensorFlow),其默認(rèn)模式為圖模式。最新版本的 TensorFlow也提供類(lèi)似PyTorch的eager模式,但是速度較慢。
如果你熟悉 NumPy,你可以將PyTorch視為有GPU支持的 NumPy。此外,現(xiàn)在有多個(gè)具備高級(jí)API(如 Keras)且以PyTorch為后端框架的庫(kù),如Fastai、Lightning、Ignite等。如果你對(duì)它們感興趣,那你選擇PyTorch的理由就多了一個(gè)。
在不同的框架里有不同的模型實(shí)現(xiàn)方法。讓我們看一下這兩種框架里的簡(jiǎn)單實(shí)現(xiàn)。本文提供了Google Colab鏈接。打開(kāi)鏈接,試驗(yàn)代碼,這可以幫助你找到最適合自己的框架。
我不會(huì)給出太多細(xì)節(jié),因?yàn)樵诖?,我們的目?biāo)是看一下代碼結(jié)構(gòu),簡(jiǎn)單熟悉一下框架的樣式。
https://colab.research.google.com/drive/1irYr0byhK6XZrImiY4nt9wX0fRp3c9mx?usp=sharing
https://colab.research.google.com/drive/1QH6VOY_uOqZ6wjxP0K8anBAXmI0AwQCm?usp=sharing
Keras中的模型實(shí)現(xiàn)
以下示例是數(shù)字識(shí)別的實(shí)現(xiàn)。代碼很容易理解。你需要打開(kāi)colab,試驗(yàn)代碼,至少自己運(yùn)行一遍。
Keras自帶一些樣本數(shù)據(jù)集,如MNIST手寫(xiě)數(shù)字?jǐn)?shù)據(jù)集。以上代碼可以加載這些數(shù)據(jù),數(shù)據(jù)集圖像是NumPy數(shù)組格式。Keras 還做了一點(diǎn)圖像預(yù)處理,使數(shù)據(jù)適用于模型。
以上代碼展示了模型。在Keras(TensorFlow)上,我們首先需要定義要使用的東西,然后立刻運(yùn)行。在Keras中,我們無(wú)法隨時(shí)隨地進(jìn)行試驗(yàn),不過(guò)PyTorch可以。
以上的代碼用于訓(xùn)練和評(píng)估模型。我們可以使用save() 函數(shù)來(lái)保存模型,以便后續(xù)用load_model()函數(shù)加載模型。predict()函數(shù)則用來(lái)獲取模型在測(cè)試數(shù)據(jù)上的輸出。
現(xiàn)在我們概覽了Keras基本模型實(shí)現(xiàn)過(guò)程,現(xiàn)在來(lái)看PyTorch。
PyTorch中的模型實(shí)現(xiàn)
研究人員大多使用PyTorch,因?yàn)樗?span style="caret-color: red;color: #5EC4B9;">比較靈活,代碼樣式也是試驗(yàn)性的。你可以在PyTorch中調(diào)整任何事,并控制全部。
在PyTorch里進(jìn)行試驗(yàn)是很容易的。因?yàn)槟悴恍枰榷x好每一件事再運(yùn)行。我們能夠輕松測(cè)試每一步。因此,在PyTorch中debug要比在 Keras 中容易一些。
接下來(lái),我們來(lái)看簡(jiǎn)單的數(shù)字識(shí)別模型實(shí)現(xiàn)。
以上代碼導(dǎo)入了必需的庫(kù),并定義了一些變量。n_epochs、momentum等變量都是必須設(shè)置的超參數(shù)。此處不討論細(xì)節(jié),我們的目的是理解代碼的結(jié)構(gòu)。
以上代碼旨在聲明用于加載訓(xùn)練所用批量數(shù)據(jù)的數(shù)據(jù)加載器。下載數(shù)據(jù)有很多種方式,不受框架限制。如果你剛開(kāi)始學(xué)習(xí)深度學(xué)習(xí),以上代碼可能看起來(lái)比較復(fù)雜。
在此,我們定義了模型。這是一種創(chuàng)建網(wǎng)絡(luò)的通用方法。我們擴(kuò)展了nn.Module,在前向傳遞中調(diào)用forward()函數(shù)。
PyTorch的實(shí)現(xiàn)比較直接,且能夠根據(jù)需要進(jìn)行修改。
以上代碼段定義了訓(xùn)練和測(cè)試函數(shù)。在Keras中,我們需要調(diào)用fit()函數(shù)把這些事自動(dòng)做完。但是在PyTorch中,我們必須手動(dòng)執(zhí)行這些步驟。像Fastai這樣的高級(jí)API庫(kù)會(huì)簡(jiǎn)化它,訓(xùn)練所需的代碼也更少。
最后,保存和加載模型,以進(jìn)行二次訓(xùn)練或預(yù)測(cè)。這部分沒(méi)有太多差別。PyTorch模型通常有pt或pth擴(kuò)展。
學(xué)會(huì)一種模型并理解其概念后,再轉(zhuǎn)向另一種模型,并不是件難事,只是需要一些時(shí)間??梢允莾蓚€(gè)都學(xué),但是不需要兩個(gè)都深入地學(xué)。
你應(yīng)該從一個(gè)開(kāi)始,然后在該框架中實(shí)現(xiàn)模型,同時(shí)也應(yīng)當(dāng)掌握另一個(gè)框架的知識(shí)。這有助于你閱讀別人用另一個(gè)框架寫(xiě)的代碼。永遠(yuǎn)不要被框架限制住。
先從適合自己的框架開(kāi)始,然后嘗試學(xué)習(xí)另一個(gè)。如果你發(fā)現(xiàn)另一個(gè)用起來(lái)更合適,那么轉(zhuǎn)換成另一個(gè)。因?yàn)镻yTorch和Keras的大多數(shù)核心概念是類(lèi)似的,二者之間的轉(zhuǎn)換非常容易。
外網(wǎng)原文鏈接:https://medium.com/@karan_jakhar/keras-vs-pytorch-dilemma-dc434e5b5ae0
實(shí)踐出真知,尋找最適合自己的深度學(xué)習(xí)框架,需要多多嘗試。此時(shí)擁有一臺(tái)性能強(qiáng)勁的深度學(xué)習(xí)工作站,尋找心儀框架事半功倍,令您研究得心應(yīng)手。Cloudhin?云軒專(zhuān)注Deep learning和高性能計(jì)算服務(wù)器定制,針對(duì)主要深度學(xué)習(xí)框架(如TensorFlow、Caffe 2、Theano或Torch)進(jìn)行了優(yōu)化和設(shè)置,在桌面上即可提供強(qiáng)大的深度學(xué)習(xí)功能。
Cloudhin?云軒WS4148深度學(xué)習(xí)水冷工作站搭載6核12線程Intel Core i7 X系列處理器,配合英特爾睿頻加速M(fèi)AX技術(shù)3.0助力高效進(jìn)行計(jì)算密集型工作負(fù)載。可選四路Nvidia Titan V GPU,將超算架構(gòu)帶入您的PC,單塊即有12GB HBM2顯存和640個(gè)Tensor核心,可提供110萬(wàn)億次浮點(diǎn)運(yùn)算性能。強(qiáng)強(qiáng)聯(lián)合,盡享GPU加速人工智能和深度學(xué)習(xí)的強(qiáng)大功能,幫助AI開(kāi)發(fā)者和數(shù)據(jù)科學(xué)家更快取得成果。
專(zhuān)業(yè)勤修,銳意進(jìn)取。云軒技術(shù)工程師畢業(yè)于NVIDIA深度學(xué)習(xí)研究所,豐富經(jīng)驗(yàn),值得信賴(lài)。更多定制方案請(qǐng)聯(lián)系客服,我們將實(shí)時(shí)響應(yīng)您的定制需求,做您服務(wù)器的貼心管理者。