PyTorch、TensorFlow最新版本對比,2021年了你選誰?
自深度學習重新獲得公認以來,許多機器學習框架層出不窮,爭相成為研究人員以及行業從業人員的新寵。從早期的學術成果 Caffe、Theano,到獲得龐大工業支持的 PyTorch、TensorFlow,許多研究者面對大量的學習框架不知該如何選擇?
最新版本對比,2021年了你選誰?">
機器學習框架。
Tensorflow / Keras 和 PyTorch 是迄今為止最受歡迎的兩個主要機器學習庫。TensorFlow 由谷歌團隊開發,于 2015 年發布。而 PyTorch 則由 Facebook 的團隊開發,并于 2017 年在 GitHub 上開源。
為了充分發揮不同機器學習框架的優勢,許多機器學習從業者對不同框架進行了比較,通過對比優缺點,以選擇最適合自己的框架。
在本文中,我們將從以下兩個方面對機器學習庫(PyTorch 1.8 和 Tensorflow 2.5)進行比較:
- 最新發行版本中的新增功能;
- 使用哪個以及為什么。
Tensorflow 2.x VS Pytorch 1.8
Tensorflow 2.x
TensorFlow 1 和 TensorFlow 2.x 之間有很多變化。第一個是 Tensorflow.js. 的發布。隨著 Web 應用程序越來越占主導地位,在瀏覽器上部署模型的需求大大增加。借助 Tensorflow.js,你可以使用 Node 在瀏覽器中運行現有的 python 模型、重新訓練現有的模型,并使用 Javascript 完全構建和訓練模型(不需要 python)。
Tensorflow 2.x 中的另一個版本是 Tensorflow Lite,一個輕量級庫,用于在移動和嵌入式設備上部署模型。這是因為移動和 Web 應用程序是兩種最主要的應用程序類型。使用 Tensorflow Lite,你可以簡單地將現有模型轉換為「compressed flat buffer」,然后將 buffer 加載到移動設備或任何其他嵌入式設備中。這期間發生的主要優化過程是將 32 位浮點值轉換成 8 位,這更適合于嵌入式設備(更少的內存使用)。
此外還包括 Tensorflow Extended(TFX)的發布,它是用于部署生產 ML pipeline 的端到端平臺。其在機器學習的 3 個最重要領域(web 應用程序、移動應用程序和生產管理)方面做得很好。機器學習生產 pipeline 仍需要大量研究和開發。TFX 可以應對經典的軟件生產挑戰,例如可擴展性、可維護性和模塊化。此外,它還可以幫助解決機器學習的特定挑戰,例如持續在線學習、數據驗證,數據管理等。
PyTorch 1.8
與 Tensorflow Lite 相似,PyTorch 改進了其現有的 Pytorch Mobile。該框架可以量化、跟蹤、優化和保存適用于 Android 和 iOS 的模型。此外還發布了 Pytorch Lite Interpreter 的原型,該原型可減小移動設備上二進制運行時的大小。此外,還通過更具體的錯誤處理和 pipeline 并行為分布式訓練提供了更多支持。Pytorch Profiler 用于分析 APP、模型的執行時間、執行流程、內存消耗等。
盡管 Pytorch lightning 不是 PyTorch 1.8 的一部分,但還是值得一提。Pytorch lightning 已發布,可以使編碼神經網絡更加簡單。可以將其視為 Pytorch 的 Keras,使用廣泛,其中的原因可歸結為 Keras 顯著的改進了 Tensorflow,因為它使實現模型變得更加容易和快捷。在 Pytorch 中,Pytorch lightning 起到了相同的作用。
該如何選擇?
從本質上講,這兩個庫都是相當不錯的,它們在性能和功能上非常接近。總的來說,兩個庫之間的編碼風格有所不同。

PyTorch 以其 OOP(面向對象編程)風格而聞名。例如,當創建自定義模型或自定義數據集時,你很可能會創建一個新類,該類繼承默認的 PyTorch 庫,然后在進行代碼調整。盡管 OOP 以某種方式為代碼提供了一種結構,但就代碼行數而言,會使代碼變得很長。
另一方面,當使用 Tensorflow 時,你很可能會使用 Keras。例如在進行 Kaggle 比賽時(監督學習圖像分類、目標檢測、圖像分割、NLP 等任務),可以發現 Keras 的代碼實現比 PyTorch 短。作為初學者 / 中級人員,這是非常不錯的選擇,因為你不必花費大量時間閱讀和分解代碼行。
在某些情況下,需要在特定的機器學習領域中尋找特定的模型。例如,當進行目標檢測比賽時,想要實現 DETR(Facebook 的 Data-Efficient transformer),結果發現大部分資源都是用 PyTorch 編寫的,因此在這種情況下,使用 PyTorch 更加容易。另外,PyTorch 的代碼實現更長,因為它們涵蓋了許多底層細節。這既是優點也是缺點。當你是初學者時先學習低層級的細節,然后再使用更高層級的 API(例如 Keras)非常有幫助。但是,這同時也是一個缺點,因為你會發現自己迷失于許多細節和相當長的代碼段中。因此,從本質上講,如果你的工作期限很緊,最好選擇 Keras 而不是 PyTorch。