import torch
x = torch.arange(4.0)
x
tensor([0., 1., 2., 3.])
在我们计算y关于X的梯度前,我们需要一个地方来存储梯度
x.requires_grad_(True)
x.grad
y = 2 * torch.dot(x,x)
y
tensor(28., grad_fn=<MulBackward0>)
通过调用反向传播函数来自动计算y关于x每个分量的梯度
y.backward()
x.grad
tensor([ 0., 4., 8., 12.])
x.grad == 4 * x
tensor([True, True, True, True])
x.grad.zero_()
y = x.sum()
y.backward()
x.grad
tensor([1., 1., 1., 1.])
def f(a):
b = a*2
while b.norm()<1000:
b = b* 2
if b.sum()> 0:
c= b
else:
c = 100 * b
return c
a = torch.randn(size=(),requires_grad=True)
d = f(a)
d.backward()
a.grad == d/a
tensor(True)
|