借助pytorch可以很方便的计算梯度,但需要明确的是:
- 
     只有
 
 float
 
 类型的
 
 Tensor
 
 才可以
- 只有最后是一个标量才可以求导,就是最后的值只有大小,不能自带方向
    
    
    逐步计算梯度
   
    首先构造一个
    
     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)
    
    
    参考文章
   
- 
如何使用pytorch自动求梯度: 
 
 https://juejin.cn/post/6854573219807461383
 
- 
Autograd:PyTorch中的梯度计算: 
 
 https://zhuanlan.zhihu.com/p/29904755
 
- 
pytorch的梯度计算以及backward方法: 
 
 https://blog.csdn.net/f156207495/article/details/88727860
 
 
