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)