autograd.grad 学习

转自:https://blog.csdn.net/waitingwinter/article/details/105774720

1.对输入变量求导

要用到输出值对输入变量(不是Weights和Biases)求导,可以用pytorch 中的autograd.grad() 函数实现。

autograd.grad(outputs, inputs, grad_outputs=None, retain_graph=None, create_graph=False, only_inputs=True, allow_unused=False)
  • outputs: 求导的因变量(需要求导的函数)
  • inputs: 求导的自变量
  • grad_outputs:  如果 outputs为标量,则grad_outputs=None,也就是说,可以不用写;  如果outputs 是向量,则此参数必须写,否则报错。输出权重?
  • create_graph: 若要计算高阶导数,则必须选为True

2.例子

y为标量:

import torch
from torch import autograd
 
x = torch.rand(3, 4)
x.requires_grad_()
y = torch.sum(x)
grads = autograd.grad(outputs=y, inputs=x)[0]
print(grads)

 y为向量:

y = x[:,0] +x[:,1]
# 设置输出权重为1
grad = autograd.grad(outputs=y, inputs=x, grad_outputs=torch.ones_like(y))[0]
print(grad)
# 设置输出权重为0
grad = autograd.grad(outputs=y, inputs=x, grad_outputs=torch.zeros_like(y))[0]
print(grad)

原文地址:https://www.cnblogs.com/BlueBlueSea/p/15707840.html