什么是动态建图?如何动态建图?动态建图为什么可以反向自动求导?
我对于这个问题一直存在疑惑,但是去网上又没有找到好的解释,于是,没办法,自己实验吧。
首先,我们做如下定义:
a = torch.randn(2)
b = torch.randn(2)
c = torch.randn(2,requires_grad=True)
m = a*b
print(m.grad_fn)
q = a*c
print(q.grad_fn)
我们定义a,b为不可自动求导的,而c是可以自动求导的。按照我们的认知,m.grad_fn为None,那q呢?不可求导乘可以求导结果是什么呢?我们进行了打印,输出如下:
None <MulBackward1 object at 0x7f9dd14a4320>
咦?不可求导乘可求导结果是可以反向传播求导的,这意味着什么呢?是否有一个是可求导的值,那这个值到最终结尾这条路上所有经过的点是不是都可以反向传播求导呢?
于是我们做了一下测试:
a = torch.randn(5,5,requires_grad=True)
b = torch.randn(5,5)
c = torch.randn(5,5)
d = torch.randn(5,5)
f = torch.randn(5,5)
for i in range(5):
for j in range(5):
c[i,j] = a[i,j]*b[i,j]</