I’m trying to use autograd.grad to calculate partial derivatives. However, I found that the grad results are summed up results, but I want seperate ones.
The code is as follows:
def df4_dx(p, c):
dist_grad = torch.autograd.grad(outputs=dist, inputs=[p], grad_outputs=torch.ones_like(dist), create_graph=True)
print("dist_grad xxxxxxx= ", dist_grad)
p2 = torch.tensor([[1.0, 2.0], [1.0, 4.0], [1.0, 6.0], [1.0, 8.0]], requires_grad=True)
ci2 = torch.tensor([[0, 0], [0, 1], [1,2]])
z4 = df4_dx(p2, ci2)
dfdx, dfdy = torch.zeros(p2.shape, ci2.shape), torch.zeros(p2.shape, ci2.shape)
print("z4 = ", z4)
Here I calculate the distance between pi and ci, there are 2 ci so I’m expecting [dfdx at c0, dfdx at c1], however I get [dfdx at c0 + dfdx at c1]. I can get the seperate resutls if i do the autograd for
dist[:, 0] and
dist[:, 1] which acts like a for-loop. May I ask is there any better way to achieve this? Thanks.