无法在pytorch python中使用多目标损失函数
Posted
技术标签:
【中文标题】无法在pytorch python中使用多目标损失函数【英文标题】:Unable to use multi target loss function in pytorch python 【发布时间】:2021-11-17 19:57:43 【问题描述】:我无法在 pytorch 中使用损失函数进行多标签分类 这是我的损失函数:
def loss(self,pred,y_true):
pred = torch.tensor(pred)
y_true = torch.tensor(y_true)
loss = nn.NLLLoss()(torch.log(pred), y_true)
return loss
关于尝试失去:
model.loss(model(xtrain),ytrain)
显示错误:
RuntimeError: 1D target tensor expected, multi-target not supported
我也用 cross_entropy 试过了:
F.cross_entropy
但是这个错误仍然出现,pytorch 中是否存在用于 multi_label 分类的内置损失
【问题讨论】:
【参考方案1】:我不相信有一个内置函数可以计算多标签分类交叉熵。 F.nll_loss
和 F.cross_entropy
仅用于单标签任务(这就是它需要密集标签的原因)。但是,您可以自己实现它。
如果pred
包含您的输出对数,那么您需要提取概率分布并应用负对数似然。这是 softmax 交叉熵损失:
>>> -torch.sum(F.log_softmax(pred, dim=1) * labels, dim=1)
如果每个输出组件彼此独立,则在 logits 上应用 sigmoid,并将每个组件视为具有负对数似然的 0/1
分类任务。这是 sigmoid 交叉熵损失:
>>> act = torch.sigmoid(pred)
>>> y_true*-torch.log(act) + (1-y_true)*-torch.log(1-act)
【讨论】:
以上是关于无法在pytorch python中使用多目标损失函数的主要内容,如果未能解决你的问题,请参考以下文章