Categories
程式開發

深度學習為什麼要選擇 PyTorch


過去幾年來,深度學習和機器學習是公眾最熱門的詞彙,對此我們有一個完美的解釋。

正是因為有了機器學習,系統才能夠從經驗中學習;而深度學習,則利用龐大的數據集將機器學習帶到了更大的規模。

在機器學習和深度學習的推動下,各種編程語言和庫應運而生,並使程序員、研究人員和數據科學家們實現了不可思議的成就。

在深度學習領域,TensorFlow和PyTorch兩個庫之間的最強者之爭由來已久,在本文中,我們將更多地關注 PyTorch。

深度學習為什麼要選擇 PyTorch 1

2016 年,Facebook 發布了面向編程場景的 PyTorch,它是基於 Lua 的 Torch 庫。

PyTorch 是一個免費的開源機器學習庫,當前版本為 1.4。 PyTorch 已發布近三年,經多番改進,現已處於最佳狀態。創建 PyTorch 是為了讓人感覺比其他競爭對手更快,更 “Python 化”。 Pytorch也支持 C、C++ 和張量計算。

Google Trend:Python 熱度隨時間變化的趨勢

深度學習為什麼要選擇 PyTorch 2

選擇 PyTorch 進行深度學習的原因

在談到為什麼不試試 PyTorch 之前,讓我們先看看下面列舉的幾個獨特而令人興奮的深度學習項目和庫,這些都是 PyTorch 促成的:

  • CheXNet:利用深度學習技術在胸片上進行放射科醫師級別的肺炎檢測。
  • Horizo​​n:應用強化學習平台(Applied RL)。
  • PYRO:Pyro 是一種通用的概率編程語言(probabilistic programming language ,PPL),用 Python 編寫,後端由 PyTorch 支持。
  • NVIDIA 的 Kaolin:作為加速 3D 深度學習的 PyTorch 庫,用於加速 3D 深度學習。
  • TorchCV:將計算機視覺應用到項目中。
  • PyDLT:一套深度學習工具。
  • fastai 庫:用來優化神經網絡訓練過程。
  • 以及更多。

這些都是建立在 TensorFlow 和 PyTorch 之上的框架和項目。

PyTorch的優越性

在 TensorFlow 的世界裡, PyTorch 能夠憑藉自己的強項堅守自己。下面是 PyTorch 的一些亮點,解釋了為什麼 PyTorch 適合深度學習項目。

1. PyTorch 更 “Python 化”

PyTorch 是一個實用框架,它可以讓我們以更 “Python 化” 的方式編寫代碼。此外,它使用樸素的 Python 代碼所支持的那種動態特性是非常了不起的。

與任何其他庫相比,PyTorch 更傾向於 Python。這是因為 PyTorch 相對容易理解,而且感覺更自然、更原生,和 Python 代碼一致。對於任何使用過 PyTorch 的人來說,他們都會對 PyTorch 的一切有一種親切的感覺,比如損失函數、優化器、轉換、數據加載器以及更多的類。

每個 PyTorch 示例(計算機視覺和自然語言處理)的代碼都有一個共同的結構:

data/
experiments/
model/
    net.py
    data_loader.py
train.py
evaluate.py
search_hyperparams.py
synthesize_results.py
evaluate.py
utils.py
  • model/net.py:指定神經網絡架構、損失函數和評估指標。
  • model/data_loader.py:指定數據應如何饋送到網絡。
  • train.py:包含主訓練循環。
  • evaluate.py:包含用於評估模型的主循環。
  • utils.py:用於處理超參數/日誌/存儲模型的實用功能。

2. 易於使用

與 PyTorch 相比,TensorFlow 的學習曲線相對較徒。 Python 程序員需要較少的時間即可使用 PyTorch,因為對他們來說,PyTorch 更像是 Python 框架的擴展。簡單的調試和一套優秀的簡單 API 就能使程序員輕鬆駕馭 PyTorch。

3. 有用的庫

在社區的大力支持下,人們的社區的熱情和貢獻也越來越大。程序員使用 PyTorch 創建了一些項目,有興趣的讀者可以去看看。下面是一個綜合列表,列出了計算機視覺、自然語言處理和生成庫等不同領域的一些項目:

  • pro_gan_pytorch:利用 ProGAN 功能。
  • BoTorch:使用貝葉斯優化。
  • ParlAI:用於共享、訓練和測試對話模型。
  • OpenNMT-py:用於實現神經機器翻譯系統。
  • MUSE:用於多語言詞嵌入。
  • skorch:用於將 scikit-learn 代碼與 PyTorch 融合。

4. 輕鬆實現數據並行

PyTorch 中的數據並行(Data Parallel)非常高效,可以將數據分成若干批,然後發送到多個 GPU 進行處理。使用這種技術,PyTorch 可以將很大一部分工作負載從 CPU 轉移到 GPU。為了實現數據並行,它使用了 torch.nn.DataParallel 類。

Distributed Data-Parallel(分佈式數據並行)是PyTorch 的一項特性,你可以將其與Data-Parallel(數據並行)結合使用來處理需要大型數據集和模型的用例,這些數據集和模型對單個GPU來說過於龐大。當 GPU 池上的所有任務完成之後,結果將被收集、合併,再由 Data-Parallel 發回給你。

def get_cnn(self, arch, pretrained):
        """Load a pretrained CNN and parallelize over GPUs
        """
        if pretrained:
            print(("=> using pre-trained model '{}'".format(arch)))
            model = models.__dict__arch
        else:
            print(("=> creating model '{}'".format(arch)))
            model = models.__dict__arch

        if arch.startswith('alexnet') or arch.startswith('vgg'):
            model.features = nn.DataParallel(model.features)
            model.cuda()
        else:
            model = nn.DataParallel(model).cuda()

        return model

5. 至少70%開發者使用PyTorch

PyTorch 是研究人員的神器,因為事實證明,開發框架的研究人員至少有 70% 都在使用 PyTorch。儘管 TensorFlow 是業界領先的應用開發選擇,但它在這方面還沒有趕上 PyTorch。這背後的一個原因可能是 PyTorch 的簡單易用性和更好的性能。

6. 移動開發就緒

從版本 1.3 開始,PyTorch 就增加了對 Android 和 iOS 設備部署的支持。這一特性,為邊緣設備帶來了 PyTorch 的所有優勢,以滿足需要較低延遲的應用。 PyTorch mobile 背後的目標是通過支持移動平台的基礎 API 來縮短開發週期,從而無需導出到諸如 Caffe2 之類的移動框架。這樣可以大大減少設備上的佔用空間。此外,為了更好地控制,還增加了對構建腳本的精確調優的支持。

PyTorch Mobile 入門:

7. 易於調試

當你可以選擇訪問每一行,並在每一行後打印的常規方式,PyTorch 調試起來很容易。錦上添花的是,PyTorch 中的對象和操作包含了實際的數據而不是符號引用,這讓程序員的工作變得更加輕鬆。 PyTorch 的一些標準調試器是:

  • ipdb
  • pdb
  • PyCharm

例如,你可以使用 pdb 的 pdb.set.trace() 函數在代碼中放置斷點,從而深入到錯誤的根源。此外,PyTorch 的動態計算圖允許在代碼執行時進行動態修改和快速調試。

深度學習為什麼要選擇 PyTorch 3

使用 pdb 進行 PyTorch 調試

8. 支持 ONNX

開放神經網絡交換格式(Open Neural Network Exchange,OONX)作為人工智能的開源生態系統,為人工智能程序員提供了一個共同的平台,讓他們可以在各種框架、工具和庫上進行互換工作。 ONNX 通過提供可跨多個框架和硬件工作的標准文件格式來實現這一目標。

說到 PyTorch,ONNX 內置了對 PyTorch 和其他一系列框架的支持,如 Caffe2、MXNet、TensorFlow 等等。 ONNX 使開發人工智能的程序員更容易導出和遷移他們的 PyTorch 模型,使之成為其他框架可以集成的開放格式。

import torch.onnx
import torchvision

  dummy_input = torch.randn(1, 3, 224, 224)
  model = torchvision.models.alexnet(pretrained=True)
  torch.onnx.export(model, dummy_input, "alexnet.onnx")

PyTorch 原生 ONNX 支持

9. 支持動態計算圖

通過將每個模型視為有向無環圖,PyTorch 提供了一種定義計算圖的動態方法。雖然其他框架也允許靜態圖定義,但 PyTorch 還支持創建動態計算圖,你可以隨時對其進行操作。從 PyTorch 的動態特性中獲益最多的一個元素是遞歸神經網絡。

10. 強大的社區支持

PyTorch 還提供了優秀的社區支持。 PyTorch 的主頁上就有關於它每個特性的詳細文檔。對庫的所有最新更新都作了很好的解釋。對於每個新添加的內容,都可以找到輔導教程和相關資源,易於上手。

PyTorch 論壇是一個非常好的、值得強烈推薦的地方,新手可以在論壇發帖提問,資深工程師也可以在論壇與程序員朋友分享自己的想法。每天都有超過 100 個帖子,這個社區非常活躍,並鼓勵人們加入 PyTorch。

下面是一些 PyTorch 開發人員社區、資源和教程,你可以通過這些資源和教程來貢獻、學習和解惑:

● PyTorch Discuss form

● PyTorch Slack Community

● PyTorch Examples

● PyTorch Docs

● Github Pytorch Tutorials

● PyTorch Beginner Cheatsheet

● PyTorch Release Notes

● Deep Learning With Pytorch : A 60 Minute Blitz

● Using Tutorial data from Google Drive in Colab

● Docs and Tutorials in Chinese

● Tutorials in Korean

結語

PyTorch 為深度學習程序員提供了大量直觀的功能,它為不同技能水平的人們提供了很多幫助。儘管提供了一個簡單的切入點,但 PyTorch 也不容小覷,因為它提供的功能不僅在某些方面提供了更好的性能,還提供了額外的獨特功能。我們在本文討論了一些最常被提及的 PyTorch 的特性,以幫助你最終選擇 PyTorch,而你此前對 PyTorch 一直持懷疑態度。

作者簡介:

Claire D.,Digitalogy 內容專員,幫助企業在 48 小時內與前 5% 的預先篩選的軟件人才建立聯繫。

原文鏈接:

https://towardsdatascience.com/reasons-to-choose-pytorch-for-deep-learning-c087e031eaca