Pytorch中对标量及张量求导

Pytorch中对标量及张量求导

1.标量对标量求导

注意:在机器学习中一般x的导数是多少,如x.grad()指的是函数在变量x处的导数。pytorch求导是函数对自变量的求导,并不计算函数对中间变量的导数
如y是x的函数,z是y的函数,f是z的函数,那么在求导的时候,会使用
f.backwrad()只会默认求f对于叶子变量x的导数值,而对于中间变量y、z的导数值是不知道的,直接通过x.grad可以知道y.grad、z.grad的值为none。这其实就是求解雅可比(Jacobian)式.
因为雅可比式可以根据已知条件(即明确的函数关系)求出,再乘以上一级梯度值,再根据BP算法的推导(链式法则)

例一:求函数f(x) = ax**2 + bx + c的导数(不涉及偏导)

x = torch.tensor(0.0,requires_grad = True) # x需要被求导
a = torch.tensor(1.0)
b = torch.tensor(-2.0)
c = torch.tensor(1.0)
y = a*torch.pow(x,2) + b*x + c 
y.backward()
dy_dx = x.grad
print(dy_dx)

#输出:tensor(-2.)

通过计算可以知道,求导结果是2a*x+b,带入a、b、x的值得到答案:2
例二:求函数Z=x12+x22+x3**2+6的导数(利用雅可比式)
有空再写,先占坑

你可能感兴趣的:(pytorch,深度学习)