I want to multiply two vectors a and b with different dimensions, and then send the product  vector c  into the objective function.
For example, the demo code is as follows:
import torch

a=torch.rand(2,requires_grad=True)
b=torch.rand(4,requires_grad=True)
c=torch.cat((a*b[:2], b[4:]), dim=0)

d = torch.nn.functional.softmax(c, dim=0)
d.sum().backward(retain_graph=True)
print(a.grad)
print(b.grad)

c.sum().backward()
print(a.grad)
print(b.grad)

The outputs are as follows:
tensor([0., 0.])
tensor([0., 0., 0., 0.])
tensor([0.4431, 0.1512])
tensor([0.2158, 0.2565, 1.0000, 1.0000])

I don’t know why the grad of a and b are both zero if there is a softmax function. As shown above,  when I remove the softmax function, the grad of a and b are both correct.