還不會使用PyTorch框架進行深度學習的小夥伴,看過來

2021-01-09 機器之心Pro

選自heartbeat.fritz.ai

作者:Derrick Mwiti

機器之心編譯

參與:Geek AI、王淑婷

這是一篇關於使用 PyTorch 框架進行深度學習的教程,讀完以後你可以輕鬆地將該框架應用於深度學習模型。

今年初,Facebook 推出了 PyTorch 1.0,該框架集成了谷歌雲、AWS 和 Azure 機器學習。學習本教程之前,你需要很熟悉 Scikit-learn,Pandas,NumPy 和 SciPy。這些程序包是使用本教程的重要先決條件。

教程大綱

何為深度學習?Pytorch 簡介相較於其它 Python 深度學習庫,Pytorch 有何優勢?Pytorch 的張量Pytorch Autograd 機制Pytorch 的 nn 模塊Pytorch optim 包Pytorch 中的自定義 nn 模塊總結和延伸閱讀

何為深度學習?

深度學習是機器學習的一個子領域,其算法受到了人類大腦工作機制的啟發。這些算法被稱為人工神經網絡。這樣的神經網絡包括用於圖像分類的卷積神經網絡、人工神經網絡和循環神經網絡。

Pytorch 簡介

Pytorch 是一個基於 Torch 的 Python 機器學習包,而 Torch 則是一個基於程式語言 Lua 的開源機器學習包。Pytorch 有兩個主要的特點:

利用強大的 GPU 加速進行張量計算(如 NumPy)用於構建和訓練神經網絡的自動微分機制

相較於其它 Python 深度學習庫,Pytorch 有何優勢?

相比其它深度學習庫,Pytorch 具有以下兩點優勢:

1. 與 TensorFlow 等其它在運行模型之前必須先定義整個計算圖的庫不同,PyTorch 允許動態定義圖。

2. PyTorch 也非常適合深度學習研究,提供了最大的靈活性和運行速度。

PyTorch Tensors

Pytorch 張量

PyTorch 張量與 NumPy 數組非常相似,而且它們可以在 GPU 上運行。這一點很重要,因為它有助於加速數值計算,從而可以將神經網絡的速度提高 50 倍甚至更多。為了使用 PyTorch,你需要先訪問其官網並安裝 PyTorch。如果你正在使用 Conda,你可以通過運行以下簡單命令來安裝 PyTorch:

為了定義 PyTorch 張量,首先需要導入 torch 包。PyTorch 允許你定義兩種類型的張量,即 CPU 和 GPU 張量。在本教程中,假設你運行的是使用 CPU 進行深度學習運算的機器,但我也會向你展示如何在 GPU 中定義張量:

PyTorch 的默認張量類型是一個浮點型張量,定義為「torch.FloatTensor」。例如,你可以根據 Python 的 list 數據結構創建張量:

如果你使用的是支持 GPU 的機器,你可以通過以下方法定義張量:

你也可以使用 PyTorch 張量執行加法和減法等數學運算:

你還可以定義矩陣並執行矩陣運算。我們來看看如何定義一個矩陣然後將其轉置:

Pytorch Autograd 機制

PyTorch 使用了一種叫做「自動微分」的技術,它可以對函數的導數進行數值估計。自動微分在神經網絡中計算反向傳遞(backward pass)。在訓練過程中,神經網絡的權重被隨機初始化為接近零但不是零的數。「反向傳遞」是指從右到左調整權重的過程,而正向傳遞則是從左到右調整權重的過程。

「torch.autograd」是 PyTorch 中支持自動微分的庫。這個包的核心類是「torch.Tensor」。如果你想要跟蹤這個類的所有操作,請將「.requires_grad」設置為 True。如果要計算所有的梯度,請調用「.backward()」。這個張量的梯度將在「.grad」屬性中積累。

如果你想要從計算歷史中分離出一個張量,請調用「.detach()」函數。這也可以防止將來對張量的計算被跟蹤。另一種防止歷史跟蹤的方法是用「torch.no_grad()」方法封裝代碼。

你可以將張量「Tensor」和函數「Function」類相連接,構建一個編碼了完整計算歷史的無環圖。張量的「.grad_fn」屬性會引用創建了這個張量的「Function」。如果你要計算導數,可以調用張量的「.backward()」。如果該張量包含一個元素,你不需要為「backward()」函數指定任何參數。如果張量包含多個元素,你需要指定一個規模(shape)相匹配的張量的梯度。

例如,你可以創建兩個張量,將其中一個張量的「requires_grad」設定為 True,將另一個的設定為 False。接著你可以用這兩個張量來執行加法和求和運算。然後你可以計算其中一個張量的梯度。

在「b」上調用「.grad」的返回值為空,因為你沒有將它的「requires_grad」設置為 True。

Pytorch 的 nn 模塊

這是在 Pytorch 中構建神經網絡的模塊。「nn」模塊依賴於「autograd」來定義模型並對其進行微分處理。首先,定義訓練一個神經網絡的過程:

1. 用一些可學習的參數(即權重)定義神經網絡

2. 在輸入的數據集上進行迭代

3 通過網絡處理輸入

4. 將預測結果和實際值進行比較,並測量誤差

5. 將梯度傳播回網絡的參數中

6. 使用簡單的更新規則更新網絡的權重:

weight = weight—learning_rate * gradient

現在,你可以使用「nn」程序包創建一個雙層的神經網絡:

在這裡我們將解釋一下上面用到的參數:

N 是批處理大小。批處理大小是觀測數據的數量,觀測之後權重將被更新。D_in 是輸入的維度H 是隱藏層的維度D_out 是輸出層的維度torch.randn 定義了指定維度的矩陣torch.nn.Sequential 初始化了神經網絡層的線性堆棧torch.nn.Linear 對輸入數據應用了線性變換 torch.nn.ReLU 在元素層級上應用了線性整流函數torch.nn.MSELoss 創建了一個標準來度量輸入 x 和目標 y 中 n 個元素的均方誤差

PyTorch optim 包

接下來,你要使用 optim 包來定義一個優化器,該優化器將為你更新權重。optim 包抽象出了優化算法的思想,並提供了常用優化算法(如 AdaGrad、RMSProp 和 Adam)的實現。我們將使用 Adam 優化器,它是最流行的優化器之一。

該優化器接受的第一個參數是張量,這些張量需要更新。在正向傳遞中,你要通過向模型傳遞 x 來計算出預測的 y。然後,計算並顯示出損失。在運行反向傳遞之前,你要將使用優化器更新的所有變量的梯度設置為零。這樣做的原因是,默認情況下,在調用「.backward()」方法時,梯度不會被重寫。然後,你需要在優化器上調用「step」函數,該步驟會更新其參數。具體的實現代碼如下所示:

PyTorch 中自定義的 nn 模塊

有時你需要構建自己的自定義模塊。這種情況下,你需要創建「nn.Module」的子類,然後定義一個接收輸入張量並產生輸出張量的 forward。使用「nn.Module」實現雙層網絡的方法如下圖所示。這個模型與上面的模型非常相似,但不同之處在於你要使用「torch.nn.Module」創建神經網絡。另一個區別是這個模型會使用 stochastic gradient descent optimizer 而不是 Adam。你可以使用下面的代碼實現一個自定義的 nn 模塊:

總結和延伸閱讀

Pytorch 允許你實現不同類型的神經網絡層,例如:卷積層、循環層、線性層。你可以從其官方文檔中了解更多關於 Pytorch 的信息。

你還可以在「Hacker News」和「Reddit」上討論這篇博客。

如果你想知道更多關於 PyTorch 如何為機器學習項目賦能的信息,可以查看下面的 Heartbeat 資源:

通過 Pytorch 實現神經網絡風格遷移地址:https://heartbeat.fritz.ai/neural-style-transfer-with-pytorch-49e7c1fe3bea

通過 Pytorch 實現基本的圖像分類地址:https://heartbeat.fritz.ai/basics-of-image-classification-with-pytorch-2f8973c51864

通過「TensorFlow Mobile」在安卓系統上部署 Pytorch 和 Keras地址:https://heartbeat.fritz.ai/deploying-pytorch-and-keras-models-to-android-with-tensorflow-mobile-a16a1fb83f2

想要入門移動機器學習嗎?加入 Heartbeat 的 Slack 小組吧!地址:https://heartbeat.fritz.ai/join-the-conversation-heartbeats-new-slack-community-620000da5819

原文連結:https://heartbeat.fritz.ai/introduction-to-pytorch-for-deep-learning-5b437cea90ac

本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。

相關焦點

  • Keras vs PyTorch:誰是第一深度學習框架?
    兩大框架的連結:  Keras:https://github.com/keras-team/keras (https://keras.io/)  PyTorch:https://github.com/pytorch/pytorch  你想學習深度學習嗎?
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。官網:http://pytorch.orgGitHub:https://github.com/pytorch/pytorchPyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:使用強大的 GPU 加速的 Tensor 計算(類似 numpy)構建於基於 tape 的 autograd 系統的深度神經網絡如有需要,你也可以復用你最喜歡的
  • 迎來PyTorch,告別 Theano,2017 深度學習框架發展大盤點
    深度學習是機器學習中一種基於對數據進行表徵學習的方法,作為當下最熱門的話題,谷歌、Facebook、微軟等巨頭紛紛圍繞深度學習做了一系列研究,一直在支持開源深度學習框架的建設。過去兩年間,它在開發者社區享有盛譽,目前已成為最為常用的深度學習框架。它的功能全,社區好,因此使用率也一直穩定保持領先。而隨著 PyTorch 等框架的橫空出世,因為文檔和接口混亂,使用繁瑣等缺點,TensorFlow 廣受詬病。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • PyTorch 深度學習官方入門中文教程 pdf 下載|PyTorchChina
    它主要由Facebookd的人工智慧小組開發,不僅能夠 實現強大的GPU加速,同時還支持動態神經網絡,這一點是現在很多主流框架如TensorFlow都不支持的。 PyTorch提供了兩個高級功能: 1.具有強大的GPU加速的張量計算(如Numpy) 2.包含自動求導系統的深度神經網絡 除了Facebook之外,Twitter、GMU和Salesforce等機構都採用了PyTorch。
  • Deep CARs:使用Pytorch學習框架實現遷移學習
    更準確地說,是使用一個深度神經網絡,因此得名Deep CARs(深度計算機自動額定值系統)。想要實現這一目標,需要完成兩部分的學習,第1部分:構建汽車分類器;第2部分:部署分類器。本文將著重論述第1部分內容。我們將使用一種叫做遷移學習的方法來訓練分類器。什麼是遷移學習?
  • 用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
    在現代機器學習應用中,對實驗到生產的流程進行簡化是最難實現的任務之一。在已經市場化深度學習框架中,Facebook的PyTorch因其高度靈活性成為數據科學界的最愛,PyTorch能夠實現快速建模和實驗。但是,深度學習應用中的許多實驗面臨的挑戰已經超出了特定框架的能力範圍。
  • PyTorch框架歷史和特性更迭與安裝過程
    PyTorch是由Facebook公司開發的深度學習框架,其起源應該是Torch這個深度學習框架。Torch深度學習框架最初的開發可以追溯到2002年。相比使用Python語言作為深度學習框架前端的PyTorch,Torch使用了Lua語言作為深度學習框架的前端。由於機器學習的主流語言是Python,相比之下,Lua語言比較小眾。
  • Keras vs PyTorch,哪一個更適合做深度學習?
    當你決定學習深度學習時,有一個問題會一直存在——學習哪種工具?深度學習有很多框架和庫。這篇文章對兩個流行庫 Keras 和 Pytorch 進行了對比,因為二者都很容易上手,初學者能夠輕鬆掌握。那麼到底應該選哪一個呢?本文分享了一個解決思路。
  • 初學AI神經網絡應該選擇Keras或是Pytorch框架?
    對於許多開發者來說,TensorFlow是他們接觸的第一個機器學習框架。TensorFlow框架儘管意義非凡,引起極大關注和神經網絡學習風潮,但對一般開發者用戶太不友好。軟體開發者畢竟不是科學家,很多時候簡單易學易用是程式設計師選擇的第一要素。
  • PyTorch官方教程書限時免費!500頁內容帶你上手最流行框架
    還不快來學?書籍地址:https://pytorch.org/assets/deep-learning/Deep-Learning-with-PyTorch.pdfPyTorch 是當前最熱的深度學習框架之一。自 2016 年誕生以來,PyTorch 迅速發展,成為廣受開發者和研究人員喜愛的框架。
  • 《PyTorch中文手冊》來了
    PyTorch 1.0 增加了一系列強大的新功能,大有趕超深度學習框架老大哥 TensorFlow 之勢。因此,學習 PyTorch 大有裨益!這是一本開源的書籍,目標是幫助那些希望和使用 PyTorch 進行深度學習開發和研究的朋友快速入門,其中包含的 Pytorch 教程全部通過測試保證可以成功運行。
  • PyTorch官方出品了一本深度學習書,免費提供給開發者
    根據出版商Manning出版社的介紹,這本書的核心,是教你如何使用Python 和 PyTorch 實現深度學習算法。所以出版商介紹稱,想要更好的消化這本書,需要對Python知識和基本線性代數有了解,對深度學習有一些理解更好,但並不需要你具備使用PyTorch或其他深度學習框架的經驗。
  • Pytorch框架安裝方法(基於Anaconda環境和Pycharm IDE)
    本文介紹基於Anaconda環境以及PyCharm軟體結合,安裝PyTorch深度學習框架。1.6 單擊啟動Anaconda Prompt 創建虛擬「房間」通過conda創建一個名為:pytorch的虛擬「房間」,可以方便未來對不同版本的PyTorch進行管理,具體方法如下:conda create -n pytorch python=3.61.7 查看創建的「房間」方法:conda info --envs
  • Facebook 開源 3D 深度學習函數庫 PyTorch3D
    原標題:Facebook開源3D深度學習函數庫PyTorch3D來源:開源中國Facebook近日開源了將PyTorch用於3D深度學習的函數庫PyTorch3D,這是一個高度模塊化且經過優化的庫,具備獨有的功能,旨在通過PyTorch簡化3D深度學習。
  • 使用PyTorch進行情侶幸福度測試指南
    DeepConnection模型框架計算機視覺--圖像和視頻數據分析是深度學習目前最火的應用領域之一。因此,在學習深度學習的同時嘗試運用某些計算機視覺技術做些有趣的事情會很有意思,也會讓你發現些令人吃驚的事實。
  • 深度學習框架簡史:TF和PyTorch雙頭壟斷,未來十年迎來黃金時期
    過去十年,機器學習(尤其是深度學習)領域湧現了大量算法和應用。在這些深度學習算法和應用湧現的背後,是各種各樣的深度學習工具和框架。它們是機器學習革命的腳手架:TensorFlow 和 PyTorch 等深度學習框架的廣泛使用,使得許多 ML 從業者能夠使用適合的領域特定的程式語言和豐富的構建模塊更容易地組裝模型。
  • 基於PyTorch的CV模型框架,北大學生出品TorchCV
    剛剛推出 1.3 正式版的 PyTorch 風頭正勁,人們已經圍繞這一深度學習框架開發出了越來越多的工具。最近,一個名為 TorchCV 的計算機視覺模型框架站上了 GitHub 趨勢榜。項目連結:https://github.com/donnyyou/torchcv該庫提供了基於深度學習的大部分 CV 問題研究的原始碼,對於使用者來說,調用最常用、最為先進的計算機模型從此可以變得更加容易。TorchCV 的作者 Donny You 來自北京大學,是機器感知與智能教育部重點實驗室的一名研三學生。
  • 60分鐘入門深度學習工具PyTorch
    GPU來替代numpy一個深度學習研究平臺:提供最大的靈活性和速度開始張量(Tensors)張量類似於numpy的ndarrays,不同之處在於張量可以使用GPU來加快計算。autograd包為張量上的所有操作提供了自動求導.它是一個運行時定義的框架,這意味著反向傳播是根據你的代碼如何運行來定義,並且每次迭代可以不同.
  • 調參俠看過來!兩個提高深度學習訓練效率的絕技
    不同於hadoop和spark等分布式數據處理框架,深度學習訓練因為要涉及參數的前項傳播和反向傳播,有兩種並行方式: 模型並行( model parallelism ):分布式系統中的不同機器(GPU/CPU等)負責網絡模型的不同部分,通常是神經網絡模型的不同網絡層被分配到不同的機器,或者同一層內部的不同參數被分配到不同機器。一般是超大的模型,一張顯卡放不下的情況,如NLP的模型。