人工智能+大数据|深入浅出pytorch求导机制


文章目录

  • pytorch求导机制
    • 1、backward
    • 2、torch.autograd.grad
    • 3、区别
    • 4、连续求导

pytorch求导机制 1、backward 创建两个矩阵
x:2×3
a:3×2
requires_grad:表示该矩阵可进行求导,相当于一个变量了,默认为false
x = torch.tensor([[1.0, 2.0, 3.], [2., 3., 4.]], requires_grad=True) a = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])

  • torck.mul(x,y):
    x 点乘 y
    x和y形状要相同
  • torch.mm(x,y):
    x 叉乘 y
    x的列和y的行要一致
y = torch.mm(x, a)

人工智能+大数据|深入浅出pytorch求导机制
文章图片

表示矩阵y对其中的可求导参数(这里是x)进行求导
y.backward():传入的参数 应为 于y相同维度的张量
y.backward(torch.ones_like(y))

x.grad即表示 y 对 x 求导后 的结果
x.grad

人工智能+大数据|深入浅出pytorch求导机制
文章图片

将梯度清零,否则梯度会累加
x.grad.data.zero_()

2、torch.autograd.grad torch.autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False)
功能:求取梯度
outputs:用于求导的张量,如 loss
inputs:需要梯度的张量
create_graph:创建导数计算图,用于高阶求导
retain_graph:保存计算图
grad_outputs:多梯度权重

x_grad = torch.autograd.grad(outputs=y, inputs=x, grad_outputs=torch.ones_like(y))

人工智能+大数据|深入浅出pytorch求导机制
文章图片

3、区别
  • torch.autograd.grad(): 第一个参数 目标函数 第二个参数 待求解的自变量参数,返回值为 求导结果的tensor
  • backward():不需要传入参数,只需要直接调用他 由目标函数tensor调用,无返回值,求导结果在 待求解自变量的grad属性中。
4、连续求导
例如:求 y=x ^ 2 对 x 的一阶偏导和二阶偏导。
import torch
x = torch.tensor([6.], requires_grad=True) y = x ** 2 grad_1 = torch.autograd.grad(y, x, create_graph=True)# grad_1 = dy/dx = 2x = 2 * 6 = 12 grad_2 = torch.autograd.grad(grad_1[0], x)# grad_2 = d(dy/dx)/dx = d(2x)/dx = 2 print(grad_1) print(grad_2)

【人工智能+大数据|深入浅出pytorch求导机制】人工智能+大数据|深入浅出pytorch求导机制
文章图片

    推荐阅读