梯度计算简单例子
下面我们来看一个简单的例子, 定义x, y, z三个变量, 其中x是需要计算梯度的.
x = torch.tensor([1.0], requires_grad=True) y = torch.tensor([2.0]) z = torch.tensor([2.0]) # 定义运算 f1 = 2*x+y # 2*1+2=4 print(f1) # tensor([4.], grad_fn=<AddBackward0>) print(f1.grad_fn) # <AddBackward0 object at 0x7fcc97180790> f2 = y+z # 2+2=4 print(f2) # tensor([4.]) print(f2.grad_fn) # None
于是可以看到, 因为x是有梯度的, f1是通过x计算得到的, 所以f1也是可以求导的. 因为这里f1=2*x+y
, 所以df1/dx=2
. 我们验证一下结果.
f1.backward() print(x.grad) print(y.grad)