1. 程式人生 > 其它 >【PyTorch官方教程中文版學習筆記01】PyTorch 自動微分

【PyTorch官方教程中文版學習筆記01】PyTorch 自動微分

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_fn
print(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