在深度學習中,我們經常需要對函數求梯度(gradient)。PyTorch提供的autograd包能夠根據輸⼊和前向傳播過程自動構建計算圖,並執行反向傳播。本節將介紹如何使用autograd包來進行自動求梯度的有關操作。
1、Tensor
創建⼀個Tensor並設置requires_grad屬性爲True:
x = torch.ones(2,2,requires_grad=True)
print(x)
print(x.grad_fn)
輸出爲:
tensor([[1., 1.],
[1., 1.]], requires_grad=True)
None
再做⼀下運算操作:
y = x + 2
print(y)
print(y.grad_fn)
輸出爲:
tensor([[3., 3.],
[3., 3.]], grad_fn=<AddBackward0>)
<AddBackward0 object at 0x112480910>
注意x是直接創建的,所以它沒有grad_fn , 而y是通過一個加法操作創建的,所以它有一個爲的grad_fn.
像x這種直接創建的稱爲葉子節點,葉子節點對應的grad_fn爲None。
2、梯度
因爲out是一個標量,所以調用.backward()時不需要指定求導變量:
out.backward() # 等價於 out.backward(torch.tensor(1.))
我們來看看 out 關於 x 的梯度 :
print(x.grad)
輸出爲:
tensor([[4.5000, 4.5000],
[4.5000, 4.5000]])