pytorch得到梯度计算结果

  • Post author:
  • Post category:其他


借助pytorch可以很方便的计算梯度,但需要明确的是:

  1. 只有

    float

    类型的

    Tensor

    才可以
  2. 只有最后是一个标量才可以求导,就是最后的值只有大小,不能自带方向



逐步计算梯度

首先构造一个

Tensor

import torch

value_list = [1, 2, 3, 4]
x = torch.tensor(value_list, requires_grad=True, dtype=torch.float64)

判断能否求导:

x.requires_grad

对x做操作:

y = torch.pow(x, 2)
z = y * 3

然后求导:

p = torch.sum(y)
p.backward()
# 或下面的方法也可以
# z.backward(torch.ones_like(y))

这样就计算出了x在链式求导后的梯度值:

print(x.grad)

得到:

tensor([2., 4., 6., 8.], dtype=torch.float64)



完整代码

import torch

value_list = [1, 2, 3, 4]

x = torch.tensor(value_list, requires_grad=True, dtype=torch.float64)
y = torch.pow(x, 2)
z = y * 3
p = torch.sum(y)
p.backward()
# z.backward(torch.ones_like(y))

print(x.grad)



参考文章