天天看點

深度學習為什麼要選擇 PyTorch

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

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

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

在機器學習和深度學習的推動下,各種程式設計語言和庫應運而生,并使程式員、研究人員和資料科學家們實作了不可思議的成就。

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

深度學習為什麼要選擇 PyTorch

2016 年,Facebook 釋出了面向程式設計場景的 PyTorch ,它是基于 Lua 的 Torch 庫。

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

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

深度學習為什麼要選擇 PyTorch

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

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

  • CheXNet:利用深度學習技術在胸片上進行放射科醫師級别的肺炎檢測。
  • Horizon:應用強化學習平台(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:用于處理超參數 / 日志 / 存儲模型的實用功能。
  1. 易于使用

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

  2. 有用的庫

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

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

    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           
  1. 至少 70% 開發者使用 PyTorch

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

  2. 移動開發就緒

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

PyTorch Mobile 入門:

  1. 易于調試

    當你可以選擇通路每一行,并在每一行後列印的正常方式,PyTorch 調試起來很容易。錦上添花的是,PyTorch 中的對象和操作包含了實際的資料而不是符号引用,這讓程式員的工作變得更加輕松。PyTorch 的一些标準調試器是:

  • ipdb
  • pdb
  • PyCharm

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

深度學習為什麼要選擇 PyTorch
  1. 支援 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")           
  1. 支援動态計算圖

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

  2. 強大的社群支援

    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 搖擺不定的人做出選擇。

作者簡介:

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

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/zhibo

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-04-16

本文作者:Claire D.

本文來自:“

InfoQ

”,了解相關資訊可以關注“