天天看點

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

PyTorch是一個非常有可能改變深度學習領域前景的Python庫。我嘗試使用了幾星期PyTorch,然後被它的易用性所震驚,在我使用過的各種深度學習庫中,PyTorch是最靈活、最容易掌握的。

在本文中,我們将講解如何入門PyTorch,包括基礎知識和案例研究。還将分别在numpy和PyTorch中從零開始建構神經網絡,以了解它們在實踐中的相似處與差別。

·PyTorch的概述

·深入研究技術細節

·在Numpy和PyTorch中分别建構神經網絡并進行對比

·與其它深度學習庫比較

·案例研究——用PyTorch解決圖像識别問題

PyTorch的創始人說過他們創作的一個準則——他們想成為當務之急。這意味着我們可以立即執行計算。這正好符合Python的程式設計方法,不需要完成全部代碼才能運作,可以輕松的運作部分代碼并實時檢查。對于我來說把它作為一個神經網絡調試器是一件非常幸福的事。

PyTorch是一個基于Python的庫,用來提供一個具有靈活性的深度學習開發平台。PyTorch的工作流程非常接近Python的科學計算庫——numpy。

現在你可能會問,為什麼我們要用PyTorch來建立深度學習模型呢?我可以列出三件有助于回答的事情:

·<b>易于使用的API</b>—它就像Python一樣簡單。

·<b>Python的支援</b>—如上所述,PyTorch可以順利地與Python資料科學棧內建。它非常類似于numpy,甚至注意不到它們的差别。

·<b>動态計算圖</b>—取代了具有特定功能的預定義圖形,PyTorch為我們提供了一個架構,以便可以在運作時建構計算圖,甚至在運作時更改它們。在不知道建立神經網絡需要多少記憶體的情況下這非常有價值。

PyTorch的其他一些優點還包括:多gpu支援,自定義資料加載器和簡化的預處理器。

自從2016年1月釋出以來,許多研究人員将其作為一種“go-to”庫,因為它可以輕松地建構新穎的甚至是極其複雜的圖形。雖說如此,PyTorch仍有一段時間沒有被大多數資料科學實踐者采用,因為它是新的而且處于“正在建設”的狀态。

在深入讨論細節之前,讓我們先看看PyTorch的工作流程。

PyTorch使用了指令式/熱切的範例。也就是說,在建構一個圖形時,每一行代碼都定義了改圖的一個元件。我們甚至能在圖形建構完成前,獨立的對這些元件進行計算。這就是所謂的“逐運作”方法。

在開始使用PyTorch時應該了解的主要元素:

·PyTorch張量

·數學運算

·Autograd子產品

·Optim子產品

·神經網絡子產品

下面讓我們依次介紹這些元素吧。

你可以如下定義一個簡單的一維矩陣:

與numpy一樣,科學計算庫非常重要的一點是能夠實作高效的數學功能。而PyTorch提供了一個類似的借口,可以使用200個以上的數學運算。

下面是在PyTorch中實作一個簡單的添加操作的例子:

這和基本的python方法非常相似。我們還可以在定義的PyTorch張量上執行各種矩陣運算。例如,我們要轉置一個二維矩陣:

PyTorch使用了一種叫做自動微分的技術。也就是說,它會有一個記錄我們所有執行操作的記錄器,之後再回放記錄來計算我們的梯度。這一技術在建構神經網絡時尤其有效,因為我們可以通過計算前路參數的微分來節省時間。

Torch.optim是一個實作各種優化算法的子產品,用于建構神經網絡。它支援大多數常用的方法,是以我們不必從頭開始建構它們。

下面是使用Adam優化器的代碼:

optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

雖然PyTorch Autograd可以很容易的定義計算圖形和使用梯度,但是對于定義複雜的神經網絡來說可能有點太低級了。而這就需要神經網絡子產品來提供幫助。

nn包定義了一組子產品,我們可以把它看作是一個神經網絡層,它産生輸入輸出,并且可能有一些可訓練的權重。

你可以把nn子產品看作是PyTorch的核心!

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

現在您已經了解了PyTorch的基本元件,那麼可以輕松地從頭建構自己的神經網絡了。如果想知道怎麼做,就繼續往下看吧。

我之前提到過PyTorch和Numpy非常相似,現在讓我們看看原因。在本節中,我們将通過實作一個簡單的神經網絡來解決二進制分類問題。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

現在,試着在PyTorch中以超級簡單的方式發現差異(在下面的代碼中用粗體表示差異)。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

PyTorch中用于資料加載的API設計的非常好,它的接口可以在資料集、采樣器和資料加載器中指定。并且通過與TensorFlow(讀取器、隊列等)資料加載工具比較發現,PyTorch的資料加載子產品非常容易使用。此外,PyTorch在建構神經網絡時是無縫的,是以不必依賴像Keras這樣的第三方高層庫。

另一方面,我也不建議使用PyTorch進行部署。因為它還尚未發展完美。正如PyTorch開發者說:“我們能夠看到,使用者會首先建立一個PyTorch模型,當要把模型投入生産時會将其轉換為Caffe2模型,之後再運送到移動平台或其他平台。”

為了更加熟悉PyTorch,我們将實踐解決分析Vidhya的深度學習問題——識别數字。讓我們看看我們的問題陳述:

我們的問題是圖像識别問題,從一個給定的28x28圖像中識别數字。一部分圖像用于訓練,其餘的用于測試模型。

首先下載下傳train和測試檔案。該資料集包含所有圖像的壓縮檔案,以及具有相應train和測試圖像名稱的train.csv和test.csv檔案。資料集隻提供png格式原始圖像,不提供其它附加功能。

現在讓我們開始吧:

<b>步驟0:準備</b>

a)導入所有必要的庫。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

b)設定一個種子值,這樣我們就可以控制模型的随機性。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

c)安全起見,第一步設定目錄路徑。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

<b>步驟</b><b>1:資料加載和預處理</b>

A)現在讓我們看看這些資料集。它們都有相應标簽檔案名,并且是.csv格式。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

B)讓我們看看資料是什麼樣的,現在讀取圖像并顯示。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較
PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

C)為了更容易操作,讓我們把是以圖像存儲為numpy數組。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

D)由于這是一個典型的機器語言(ML)問題,為了測試模型的正常運作,我們建立了一個驗證集。訓練集與驗證集比例為70:30。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

<b>步驟</b><b>2:構模組化型</b><b> </b>

A)這是最重要的部分!首先定義神經網絡架構。我們定義了一個具有輸入、隐藏和輸出三層的神經網絡。輸入和輸出中的神經元數目是固定的,因為輸入是28x28的圖像,輸出是一個10x1向量的代表類,而在隐藏層我們采用了50個神經元。在這裡,我們用Adam作為優化算法,這是梯度下降算法的有效變體。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

B)訓練模型。

PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較
PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較
PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較
PyTorch入門教程介紹目錄PyTorch的概述深入技術細節分别在Numpy和PyTorch中建構神經網絡并比較

訓練成績如下:

0.8779008746355685

而驗證分數為:

0.867482993197279

這是一個相當令人印象深刻的分數,尤其是這個非常簡單的神經網絡我們隻訓練了5次。

文章原标題《An Introduction to PyTorch - A Simple yet Powerful Deep Learning Library》

作者:Faizan Shaikh

譯者:奧特曼,審校:袁虎。