例子1
import torch
x = torch.arange(4.0)
x.requires_grad_(True) #标记需要记录该变量的微分
y = 2*torch.dot(x,x) #计算函数
y.backward()
print(x.grad)
首先给x分配初值[0,1,2,3],标记成需要追踪梯度的变量。计算函数y=2x⊤x 。代码y.backward()
将y关于变量x的梯度存入x.grad
中。
再
例子2
对于下述代码,z函数包含两个向量变量,分别求出z函数关于x和y的梯度。
import torch
x = torch.arange(4.0)
y = torch.arange(10.0,14.0)
x.requires_grad_(True)
y.requires_grad_(True) #标记成需要追踪梯度的变量
z=torch.dot(x,y)
z.backward() #求梯度
x.grad
y.grad
输出:
tensor([10., 11., 12., 13.])
tensor([0., 1., 2., 3.])
即z关于x的梯度是y,z关于y的梯度是x。