一、问题起源:
阅读《python深度学习:基于pytorch》这本书的tensor 与Autograd一节时,看到2.5.4非标量反向传播
二、疑点在于:
backward(gradient=)这一参数没有理由的就选择了(1,1),之后调整为(1,0)和(0,1)便能正确求解,对该参数的设置原理,反向梯度求解的过程没有说清楚。
三、分析过程:
看完博客https://www.cnblogs.com/zhouyang209117/p/11023160.html
便确认gradient这一参数的设置应该是根据使用者的需求,比如说设置为(1,0)就正好求得y1对x的导数。
但是两者的求解过程不一致,书中=J的转置*V的转置,但是博客中假设的是V*J ,其实解释的原理都是一样的 ,就是希望设置V来分别在y的不同分量上求得对x的导数,然后组合向量,获得最终y对于x的导数。
虽然求解过程,但各偏导值是一致的。
书中x.grad = [[6,9]],但是博客中只有x1,x2,x3的梯度值,即便将代码改为对x求导,结果x.grad=None
x = torch.tensor([1,2,3],requires_grad=True, dtype=torch.float)
y.backward(torch.tensor([1, 1, 1], dtype=torch.float))
print(x.grad) # No