深度學習 PyTorch 庫的簡要介紹
下面的教程假設了一些關於 Python 編程語言和高中數學的基本知識。不需要事先具備深入學習的知識。本文介紹了開始深入學習所需的 PyTorch 的基本知識和工作。按照教程進行操作,獲得實際操作經驗。
PyTorch 是一個優化的張量庫,主要用於使用 gpu 和 cpu 的深度學習應用程序。它是一個針對 Python 的開源機器學習庫,主要由 Facebook 人工智能研究團隊開發。它是一個廣泛使用的機器學習庫,其他的是 TensorFlow 和 Keras。以下是 Google 的搜索趨勢,它表明 PyTorch 庫的受歡迎程度相對高於 TensorFlow 和 Keras。
PyTorch 是基於 python 和 torch 庫構建的,torch 庫支持在圖形處理單元上計算張量。目前是深度學習和人工智能研究界最喜歡使用的庫。
現在讓我們開始實踐 PyTorch!
我們正在使用 Jupyter Notebook 來運行我們的代碼。我們建議你繼續學習有關 google colaboratory 的教程。它是一個 Jupyter Notebook 環境,不需要設置就可以使用,完全在雲中運行。我們也可以免費使用 GPU。你可以查看此鏈接以獲得使用 Colab 的一些指導。
- https://colab.research.google.com/
張量
PyTorch 是一個處理張量的庫。張量是數據的基本單位。它可以是數字、向量、矩陣或任何 n 維數組。它類似於 Numpy 數組。
在開始之前,我們應該導入 torch 模塊,如下所示:
import torch
創建張量
創建一個以單個數字爲數據的張量 t1
# Tensor with Single number
t1 = torch.tensor(5.)
print(t1)
Output : tensor(5.)
5 是 5.0 的簡寫。它用來表示張量是浮點數。我們可以使用 tensor.dtype 來驗證, 如果你使用的是 Jupyter Notebook,那麼你可以直接在單元格中輸入變量並運行它來查看結果。
print(t1.dtype)
Output: torch.float32
同樣,我們可以創建向量類型的張量,
# Tensor with 1D vector
t2 = torch.tensor([1, 2, 3., 4])
print(t2)
Output: tensor([1., 2., 3., 4.])
從上面的輸出可以看出,即使向量的一個元素是浮點數,張量也會將所有元素的數據類型轉換爲 float。
現在我們創建一個二維張量
# Matrix
t3 = torch.tensor([[1., 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(t3)
Output: tensor([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])
一個三維張量,
t4 = torch.tensor([
[[10. , 11, 12],
[13, 14, 15]],
[[16, 17, 18],
[19, 20, 21]]
])
print(t4)
Output: tensor([[[10., 11., 12.],
[13., 14., 15.]],
[[16., 17., 18.],
[19., 20., 21.]]])
如果我們觀察到這些張量其實類似於 NumPy 數組,我們可以使用 tensor.shape 檢查張量形狀。數組的維數將是返回形狀的長度。
我們上面定義的張量的形狀是,
print(t1.shape)
Output: torch.Size([])
因爲 t1 只是一個數字,所以它的維數是 0。
print(t2.shape)
Output: torch.Size([4])
因爲 t2 是一個向量,它的維數是 1。
print(t3.shape)
Output: torch.Size([3, 3])
因爲 t3 是一個 3×3 的矩陣,所以它的維數是 2
print(t4.shape)
Output: torch.Size([2, 2, 3])
由於 t4 是由兩個 2×3 的張量疊加而成,所以它的維數是 3
張量運算與梯度計算
我們可以用常用的算術運算對張量進行運算。而且,張量有一種特殊的能力來計算給定表達式相對於所有自變量的梯度或導數。讓我們看一個例子
定義一些張量然後初始化一些值,
x = torch.tensor(3.)
w = torch.tensor(4. ,requires_grad=True)
z = torch.tensor(5. ,requires_grad=True)
x , w , z
Output: (tensor(3.), tensor(4., requires_grad=True), tensor(5., requires_grad=True))
在上面的代碼片段中,我們創建了 3 個張量 x、w 和 z,對於 w 和 z,另外一個參數需要將 require_grad 設置爲 True。
現在讓我們用這些張量做一個算術運算,
y = x*w + z
print(y)
Output: tensor(17., grad_fn=<AddBackward0>)
所以根據基本的乘法和加法,我們得到了預期的結果,即 y=3*4+5=17。
自動計算導數
現在讓我們來討論 Pytorch 的一個獨特功能,它可以自動計算任何表達式(在本例中是 y)對自變量的導數,自變量的參數需要設置爲 True
這可以通過調用 y 上的. backward 方法來實現
#Compute derivatives
y.backward()
我們可以找到 y wrt 輸入張量的導數,這些導數存儲在各個輸入張量的梯度性質中。
print("dy/dx =", x.grad)
print("dy/dw =", w.grad)
print("dy/dz =", z.grad)
Output : dy/dx = None
dy/dw = tensor(3.)
dy/dz = tensor(1.)
我們可以觀察到以下情況:
-
y wrt x 的導數的值爲 “None”,因爲參數 requires_grad 需要設置爲 False
-
y wrt w 的導數的值是 3,因爲 dy/dw=x=3
-
y wrt z 的導數的值是 1,因爲 dy/dz=1
帶 NumPy 的 PyTorch
NumPy 是一個流行的開源庫,用於 python 中的科學和數學計算。它還支持對大型多維數組的操作以及基於線性代數、傅立葉變換和矩陣的計算。NumPy 擁有一個龐大的支持庫生態系統,包括 Pandas、Matplotlib 和 OpenCv。
因此 PyTorch 與 NumPy 進行互操作,以利用 NumPy 的工具和庫,然後進一步擴展功能。
首先,讓我們創建一個 NumPy 數組。
#First create a numpy array
import numpy as np
x = np.array([1, 2., 3])
print(x)
Output: array([1., 2., 3.])
所以我們可以使用 torch.from_numpy( )
#Create a tensor from numpy array
y. = torch.from_numpy(x)
print(y)
Output: tensor([1., 2., 3.], dtype=torch.float64)
我們可以使用. dtype 檢查數據類型
print(x.dtype)
print(y.dtype)
Output: float64
torch.float64
現在我們可以使用. NumPy() 方法將 PyTorch 張量轉換爲 NumPy 數組
z = y.numpy()
print(z)
Output: array([1., 2., 3.])
與 NumPy 的互操作性是必需的,因爲你將使用的大多數數據集都很可能在 NumPy 中處理。
在這裏,你可能想知道爲什麼我們使用 Pytorch 而不是 NumPy,因爲它還提供了處理多維數組和執行大型計算所需的所有庫和實用程序。主要有兩個原因:
-
AutoGrad:爲張量運算計算梯度的能力是一種強大的能力,對於訓練神經網絡和執行反向傳播是必不可少的。
-
GPU 支持:在處理大量數據集和大型模型時,PyTorch 張量操作在圖形處理單元(GPU)中執行,這將使普通 cpu 所需的時間減少 40 倍到 50 倍。
因此,PyTorch 是一個非常強大的深度學習庫,它的表現力和 python 特性在研究和開發社區得到了廣泛的應用。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/Ksm3b3a5nq7emUq-GtDOiw