【PyTorch官方教程中文版學習筆記01】PyTorch 自動微分
阿新 • • 發佈:2022-03-10
autograd 包是 PyTorch 中所有神經網路的核心。首先讓我們簡要地介紹它,然後我們將會去訓練
我們的第一個神經網路。該 autograd 軟體包為 Tensors 上的所有操作提供自動微分。它是一個由
執行定義的框架,這意味著以程式碼執行方式定義你的後向傳播,並且每次迭代都可以不同。我們
從 tensor 和 gradients 來舉一些例子。
""代表結果 #代表解釋
1. Tensor
torch.Tensor 是包的核心類。如果將其屬性 .requires_grad 設定為 True,則會開始跟蹤針對 tensor
的所有操作。完成計算後,您可以呼叫 .backward() 來自動計算所有梯度。該張量的梯度將累積到
.grad 屬性中。
import torch #建立一個張量,設定 requires_grad=True 來跟蹤與它相關的計算 x = torch.ones(2, 2, requires_grad=True) print(x) "輸出:tensor([[1., 1.],[1., 1.]], requires_grad=True)" y = x + 2 #針對張量做一個操作 print(y) "tensor([[3., 3.],[3., 3.]], grad_fn=<AddBackward0>)"# y作為操作的結果被建立,所以它有 grad_fnprint(y.grad_fn) "<AddBackward0 object at 0x7fe1db427470>" #.requires_grad_( … ) 會改變張量的 requires_grad 標記。輸入的標記預設為 False ,如果沒有提供 #相應的引數
2. Gradients
我們現在後向傳播,因為輸出包含了一個標量,out.backward() 等同於
out.backward(torch.tensor(1.))。
z = y * y * 3 out = z.mean() print(z, out) out.backward() print(x.grad) "tensor([[4.5000, 4.5000],[4.5000, 4.5000]])" #y=x+2,z=3/4*(x+2)^2,z對x求導後為3/2*(x+2).帶入x=1,為4.5