参考链接: Pytorch中的自动求导函数backward()所需参数的含义
pytorch中backward()函数详解
PyTorch 的 backward 为什么有一个 grad_variables 参数?
三个链接明白了backward()自动求导的原理,以及矩阵自动求导的原理,以及grad_variables参数的意义。 因为经过了复杂的神经网络之后,out中每个数值都是由很多输入样本的属性(也就是输入数据)线性或者非线性组合而成的,那么out中的每个数值和输入数据的每个数值都有关联,也就是说【out】中的每个数都可以对【a】中每个数求导,那么我们backward()的参数[k1,k2,k3…kn]的含义理解成每个out分量对an求导时的权重。这个总结很好!
import torch
from torch.autograd import Variable
from torch import nn
a = Variable(torch.FloatTensor([[6, 3], [1, 2]]), requires_grad=True)
w = Variable(torch.zeros(2, 1), requires_grad=True)
out = torch.mm(a, w)
out.backward(torch.FloatTensor([[1.], [1.]]), retain_graph=True)
print("gradients are:{}".format(w.grad.data))
结果是:
gradients are:tensor([[7.],
[5.]])
可以琢磨琢磨为什么是这样的7和5,懂了就觉得简单了!
|