I want to get gradient of more than one loss, and I tried autograd.grad,
import torch
x = torch.ones(5, requires_grad=True)
y = torch.ones(5, requires_grad=True)
def l2(x):
    return (x*x).sum()
def l3(x):
    return (x*x*x).sum()
loss1 = l2(x)
loss2 = l3(x)
torch.autograd.grad((loss1,loss2), x)

but I get
(tensor([5., 5., 5., 5., 5.]),)

which means pytorch gets gradients of loss1+loss2 , ranther loss1 and loss2.
While I have an idea to get both gradient through code below, but need two networks perhaps.
import torch
x = torch.ones(5, requires_grad=True)
y = torch.ones(5, requires_grad=True)
def l2(x):
    return (x*x).sum()
def l3(x):
    return (x*x*x).sum()
loss1 = l2(x)
loss3 = l3(y)
torch.autograd.grad((loss1,loss3), (x, y))

(tensor([2., 2., 2., 2., 2.]), tensor([3., 3., 3., 3., 3.]))

Does anyone have good idea to get gradients of different loss through only one variable? Thanks!