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!