Tutorial

x = torch.randn(2, requires_grad=True)
y = x*3
gradients = torch.tensor([100,0.1], dtype = torch.float)
y.backward(gradients)
print(x.grad)

#tensor([300.0000,   0.3000])
x = torch.randn(2, requires_grad=True)
y = x*3
gradients = torch.tensor([100,0.1], dtype = torch.float)
y.backward(gradients, retain_graph = True)
print(x.grad)
y.backward(gradients)
print(x.grad)
#tensor([300.0000,   0.3000])
#tensor([600.0000,   0.6000])
x = torch.randn(2, requires_grad=True)
y = x *3
z = x / 2
w = x + y
w, y,z

#(tensor([ 0.7003, -0.1958], grad_fn=<AddBackward0>),
#tensor([ 0.5252, -0.1468], grad_fn=<MulBackward0>),
#tensor([ 0.0875, -0.0245], grad_fn=<DivBackward0>))