autograd自动求导
1、torch.autograd.backward(tensors, grad_tensors=None, retain_graph=None, create_graph=False)
功能:自动求取梯度
参数:
tensors:用于求导的张量,如loss
retain_graph:保存计算图(注意:当我们要进行二次梯度回传时,要将此处设置为True)
create_graph:创建导数计算图,用于高阶求导
grad_tensors:多梯度权重
以
y
=
(
x
+
w
)
∗
(
w
+
1
)
y=(x+w)*(w+1)
y=(x+w)∗(w+1)为例,代码展示为:
import torch
# 先创建计算图,在使用autograd自动求导
# autograd自动求导
w = torch.tensor([1, ], requires_grad=True)
x = torch.tensor([2, ], requires_grad=True)
a = torch.add(w, x)
b = torch.add(w, 1)
y = torch.mul(a, b)
# 在这里直接使用tensor.backward的原因是在backward方法中会自动调用tensor.autograd.backward方法
y.backward()
print(w.grad) # [5, ]
2、torch.autograd.grad(outputs, inputs, grad_tensors=None, retain_graph=None, create_graph=False)
功能:求取梯度
参数:
outputs:用于求导的张量,如loss
inputs:需要梯度的张量
retain_graph:保存计算图
create_graph:创建导数计算图,用于高阶求导(注意当我们要进行二阶求导时,需要将此项设置为True,创建出导数的计算图)
grad_tensors:多梯度权重
3、tensor.grad.zero_()
zero后面的 ‘_‘ 代表原地操作,不开辟新的内存空间
功能:梯度清零
注意:每次计算梯度不会自动清除,会进行叠加,所以需要在每次计算梯度后进行手动清零