hello,

how can i introduce weights to my final loss and how can i learn the best weight?

```
def criterion(triplet_y, softmax_y, labels):
losses = [embedding_criterion(output, labels)[0] for output in triplet_y] + \
[xent_criterion(output, labels) for output in softmax_y]
loss = sum(losses)
return loss
```

If you use trainable weights on your last loss, the training would push them to a negative value, as itās yielding the minimal loss, wouldnāt it?

Anyway, you could define a new parameter as:

```
weight = nn.Parameter(torch.tensor(1))
```

and push it to the optimizer with all other parameters:

```
optimizer = torch.optim.SGD(list(model.parameters()) + [weight], lr=1e-3)
```

maybe i did not explain well what i want to do

im mean that i wanna have a weight for every loss like this :

```
losses = W1 * [embedding_criterion(output, labels)[0] for output in triplet_y] + \
W2 * [xent_criterion(output, labels) for output in softmax_y]
```

but this is not working, it generates an error

What kind of error is it generating?

i did

```
0.2 * [xent_criterion(output, labels) for output in softmax_y] + \
[xent_criterion(output, labels) for output in softmax_y]
```

the error is

[xent_criterion(output, labels) for output in softmax_y] +

TypeError: canāt multiply sequence by non-int of type āfloatā

but i think that the problem is solved, i must do[ 0.2 * xent_criterion(output, labels) for output in softmax_y] + \

but still dont know how to learn the best valur of the weight, i just take 0.2 randomly

Ah OK, yes the error is thrown as you cannot multiply a scalar with a `list`

directly.

Iām still unsure, if ālearningā the weight would work, since it would just push it to a negative value.

However, if you want to use the weight as a trainable parameter, refer to my code snippet from my previous post.

1 Like