pytorch 如何在 Torch 损失函数中设置样本权重?

8dtrkrch  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(114)

我知道torch.nn.CrossEntropyLoss(权重=?)参数“权重”意味着平衡来自不同类别的样本之间的不平衡,它是用于类别的参数,并且它具有类别数目的长度。那么,如果我想在计算损失时设置不同样本的权重,其中有样本数量的长度,我应该怎么做?ps:就像www.example.com中的“sample_weight”keras.Sequential.fit(sample_weight=?)
尝试使用torch.nn.Parameter(),但似乎没有用;期待一些解决方案PLZ。

nx7onnlm

nx7onnlm1#

如果你想在交叉熵损失中使用样本权重,你需要像这样做:

entropy_loss = torch.nn.CrossEntropyLoss(reduction='none')
loss = entropy_loss(output, target)
loss = (loss*sample_weights).mean()
loss.backward()

参见https://discuss.pytorch.org/t/per-class-and-per-sample-weighting/25530/4
这假设你的样本权重是标准化的btw。

iibxawm4

iibxawm42#

在学习中的每一步使用sample_weight

loss = criterion(outputs, batch_targets)
weighted_loss = (loss * sample_weight).mean()

相关问题