PyTorch 1.8 和 Tensorflow 2.5,我該用哪個(gè)?
自深度學(xué)習(xí)重新獲得公認(rèn)以來,許多機(jī)器學(xué)習(xí)框架層出不窮,爭相成為研究人員以及行業(yè)從業(yè)人員的新寵。從早期的學(xué)術(shù)成果 Caffe、Theano,到獲得龐大工業(yè)支持的 PyTorch、TensorFlow,許多研究者面對大量的學(xué)習(xí)框架不知該如何選擇?
機(jī)器學(xué)習(xí)框架。
Tensorflow / Keras 和 PyTorch 是迄今為止最受歡迎的兩個(gè)主要機(jī)器學(xué)習(xí)庫。TensorFlow 由谷歌團(tuán)隊(duì)開發(fā),于 2015 年發(fā)布。而 PyTorch 則由 Facebook 的團(tuán)隊(duì)開發(fā),并于 2017 年在 GitHub 上開源。
為了充分發(fā)揮不同機(jī)器學(xué)習(xí)框架的優(yōu)勢,許多機(jī)器學(xué)習(xí)從業(yè)者對不同框架進(jìn)行了比較,通過對比優(yōu)缺點(diǎn),以選擇最適合自己的框架。
在本文中,我們將從以下兩個(gè)方面對機(jī)器學(xué)習(xí)庫(PyTorch 1.8 和 Tensorflow 2.5)進(jìn)行比較:
- 最新發(fā)行版本中的新增功能;
- 使用哪個(gè)以及為什么。
Tensorflow 2.x VS Pytorch 1.8
Tensorflow 2.x
TensorFlow 1 和 TensorFlow 2.x 之間有很多變化。第一個(gè)是 Tensorflow.js. 的發(fā)布。隨著 Web 應(yīng)用程序越來越占主導(dǎo)地位,在瀏覽器上部署模型的需求大大增加。借助 Tensorflow.js,你可以使用 Node 在瀏覽器中運(yùn)行現(xiàn)有的 python 模型、重新訓(xùn)練現(xiàn)有的模型,并使用 Javascript 完全構(gòu)建和訓(xùn)練模型(不需要 python)。
Tensorflow 2.x 中的另一個(gè)版本是 Tensorflow Lite,一個(gè)輕量級庫,用于在移動(dòng)和嵌入式設(shè)備上部署模型。這是因?yàn)橐苿?dòng)和 Web 應(yīng)用程序是兩種最主要的應(yīng)用程序類型。使用 Tensorflow Lite,你可以簡單地將現(xiàn)有模型轉(zhuǎn)換為「compressed flat buffer」,然后將 buffer 加載到移動(dòng)設(shè)備或任何其他嵌入式設(shè)備中。這期間發(fā)生的主要優(yōu)化過程是將 32 位浮點(diǎn)值轉(zhuǎn)換成 8 位,這更適合于嵌入式設(shè)備(更少的內(nèi)存使用)。
此外還包括 Tensorflow Extended(TFX)的發(fā)布,它是用于部署生產(chǎn) ML pipeline 的端到端平臺(tái)。其在機(jī)器學(xué)習(xí)的 3 個(gè)最重要領(lǐng)域(web 應(yīng)用程序、移動(dòng)應(yīng)用程序和生產(chǎn)管理)方面做得很好。機(jī)器學(xué)習(xí)生產(chǎn) pipeline 仍需要大量研究和開發(fā)。TFX 可以應(yīng)對經(jīng)典的軟件生產(chǎn)挑戰(zhàn),例如可擴(kuò)展性、可維護(hù)性和模塊化。此外,它還可以幫助解決機(jī)器學(xué)習(xí)的特定挑戰(zhàn),例如持續(xù)在線學(xué)習(xí)、數(shù)據(jù)驗(yàn)證,數(shù)據(jù)管理等。
PyTorch 1.8
與 Tensorflow Lite 相似,PyTorch 改進(jìn)了其現(xiàn)有的 Pytorch Mobile。該框架可以量化、跟蹤、優(yōu)化和保存適用于 Android 和 iOS 的模型。此外還發(fā)布了 Pytorch Lite Interpreter 的原型,該原型可減小移動(dòng)設(shè)備上二進(jìn)制運(yùn)行時(shí)的大小。此外,還通過更具體的錯(cuò)誤處理和 pipeline 并行為分布式訓(xùn)練提供了更多支持。Pytorch Profiler 用于分析 APP、模型的執(zhí)行時(shí)間、執(zhí)行流程、內(nèi)存消耗等。
盡管 Pytorch lightning 不是 PyTorch 1.8 的一部分,但還是值得一提。Pytorch lightning 已發(fā)布,可以使編碼神經(jīng)網(wǎng)絡(luò)更加簡單??梢詫⑵湟暈?Pytorch 的 Keras,使用廣泛,其中的原因可歸結(jié)為 Keras 顯著的改進(jìn)了 Tensorflow,因?yàn)樗箤?shí)現(xiàn)模型變得更加容易和快捷。在 Pytorch 中,Pytorch lightning 起到了相同的作用。
該如何選擇?
從本質(zhì)上講,這兩個(gè)庫都是相當(dāng)不錯(cuò)的,它們在性能和功能上非常接近。總的來說,兩個(gè)庫之間的編碼風(fēng)格有所不同。
PyTorch 以其 OOP(面向?qū)ο缶幊蹋╋L(fēng)格而聞名。例如,當(dāng)創(chuàng)建自定義模型或自定義數(shù)據(jù)集時(shí),你很可能會(huì)創(chuàng)建一個(gè)新類,該類繼承默認(rèn)的 PyTorch 庫,然后在進(jìn)行代碼調(diào)整。盡管 OOP 以某種方式為代碼提供了一種結(jié)構(gòu),但就代碼行數(shù)而言,會(huì)使代碼變得很長。
另一方面,當(dāng)使用 Tensorflow 時(shí),你很可能會(huì)使用 Keras。例如在進(jìn)行 Kaggle 比賽時(shí)(監(jiān)督學(xué)習(xí)圖像分類、目標(biāo)檢測、圖像分割、NLP 等任務(wù)),可以發(fā)現(xiàn) Keras 的代碼實(shí)現(xiàn)比 PyTorch 短。作為初學(xué)者 / 中級人員,這是非常不錯(cuò)的選擇,因?yàn)槟悴槐鼗ㄙM(fèi)大量時(shí)間閱讀和分解代碼行。
在某些情況下,需要在特定的機(jī)器學(xué)習(xí)領(lǐng)域中尋找特定的模型。例如,當(dāng)進(jìn)行目標(biāo)檢測比賽時(shí),想要實(shí)現(xiàn) DETR(Facebook 的 Data-Efficient transformer),結(jié)果發(fā)現(xiàn)大部分資源都是用 PyTorch 編寫的,因此在這種情況下,使用 PyTorch 更加容易。另外,PyTorch 的代碼實(shí)現(xiàn)更長,因?yàn)樗鼈兒w了許多底層細(xì)節(jié)。這既是優(yōu)點(diǎn)也是缺點(diǎn)。當(dāng)你是初學(xué)者時(shí)先學(xué)習(xí)低層級的細(xì)節(jié),然后再使用更高層級的 API(例如 Keras)非常有幫助。但是,這同時(shí)也是一個(gè)缺點(diǎn),因?yàn)槟銜?huì)發(fā)現(xiàn)自己迷失于許多細(xì)節(jié)和相當(dāng)長的代碼段中。因此,從本質(zhì)上講,如果你的工作期限很緊,最好選擇 Keras 而不是 PyTorch。