自动求导:
前提:x=torch.arange(4.0)
计算y关于x求导的梯度:
在计算前,要找一个地方来存求出的梯度,用:
x.require_grad_(True) #等价于 x=torch.arange(4.0,require) , 梯度一开始默认为None
计算:
y = 2 * torch.dot(x, x) y
得:
tensor(28., grad_fn=<MulBackward0>)
接下来,我们通过调用反向传播函数来自动计算y
关于x
每个分量的梯度,并打印这些梯度:
y.backward() #反向传播函数 x.grad
得:
tensor([ 0., 4., 8., 12.]) #前面的y=2*x^2,那么y求导以后,y=4*x,在新的每一点的导数就是0 4 8 12
在默认情况下,PyTorch会累积梯度,我们需要清除之前的值
要清除就输入一次:x.grad.zero_()