【DeepLearning】【PyTorch (1)】PyTorch官方教程個人筆記
PyTorch 官方教程 Getting Started 第一部分 Deep Learning with PyTorch: A 60 Minute Blitz 筆記
文章目錄
1. What is PyTorch?
PyTorch 是基於 Python 的科學計算包,目的有兩個:
- 神經網路上的NumPy.
- 敏捷高效的深度學習框架.
PyTorch是Torch在Python上的移植,Torch是基於Lua語言的的深度學習框架。因此,PyTorch繼承了Torch靈活的動態圖特性,與Python語言簡潔的語法特性。基於這兩個特性,PyTorch可以輕鬆地與NumPy互動。NumPy將array放入CPU加速計算,PyTorch將Tensor放入GPU加速計算
PyTorch 和 TensorFlow 類似,使用 Tensor 組織資料。Tensor(張量) 和 NumPy 的 ndarray(多維陣列) 相似 。
from __future__ import print_function
import torch
建立未初始化的 5x3 矩陣:
x = torch.empty(5, 3)
print(x)
Out:
tensor([[4.1371e-07, 4.5822e-41, 6.7807e-06], [4.5822e-41, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00], [0.0000e+00, 0.0000e+00, 0.0000e+00]])
建立隨機初始化的矩陣:
x = torch.rand(5, 3)
print(x)
Out:
tensor([[0.3814, 0.6408, 0.5860],
[0.4887, 0.5330, 0.8477],
[0.5300, 0.5962, 0.5901],
[0.3305, 0.5589, 0.7821],
[0.4265, 0.6637, 0.2600]])
建立0矩陣初始化的矩陣,資料型別為長整型:
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
Out:
tensor([[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0],
[0, 0, 0]])
建立矩陣,從 Python 資料結構獲得資料:
x = torch.tensor([5.5, 3])
print(x)
Out:
tensor([5.5000, 3.0000])
上面所建立x
是一個torch.Tensor
。它就是高維張量,其每一個元素的資料型別都相同。
Torch 定義了8位CPU張量型別和8位GPU張量型別。點選這裡。
print(type(x))
Out
<class 'torch.Tensor'>
每個torch.Tensor
都有它的torch.dtype
、torch.device
和torch.layout
,這些都是它的屬性(Tensor Attributes)
2. Autograd: Automatic Differentiation
Autograd: Automatic Differentiation
與TensorFlow的靜態圖方式不同,PyTorch使用動態圖的方式計算梯度反向傳播。
PyTorch的動態圖特性依賴其自動微分機制(Autograd mechanics)。動微分機制(Autograd mechanics)具體由torch.autograd
包實現。
將torch.Tensor
的.requires_grad
屬性設定為True
,將開始跟蹤在這個tensor上的所有operations。當完成對這個tensor的所有operatio後,呼叫.backward()
,自動計算它的所有梯度,它的梯度值積累儲存在.grad
屬性裡。
呼叫.detach()
停止追蹤計算曆史。
將程式碼塊包裹在with torch.no_grad():
內,可以強制停止追蹤計算曆史,即使程式碼塊內的tensor的requires_grad=True
。
torch.autograd.Function
類對自動微分機制(Autograd mechanics)非常重要。
Tensor
和Function
是相互連線的,共同建立一個無環的計算圖。每個tensor都有一個.grad_fn
屬性,關聯到建立這個Tensor
的Function
上。如果這個Tensor
不是由Function
建立的,而是由使用者建立的,則它的grad_fn = None
。
數學上,如果有一個向量值函式
,
對每個
的梯度組成一個雅克比矩陣(Jacobian matrix):
一般地,torch.autograd
是計算雅克比矩陣-向量內積的引擎。也就是說,給定任意向量
,計算內積
。當
是標量函式
的梯度時,也就是,
,那麼,根據鏈式法則,雅克比矩陣-向量內積就是
對
的梯度: