【问题标题】:Unable to use multi target loss function in pytorch python无法在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 分类的内置损失

【问题讨论】:

    标签: python deep-learning neural-network pytorch loss-function


    【解决方案1】:

    我不相信有一个内置函数可以计算多标签分类交叉熵。 F.nll_lossF.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)
      

    【讨论】:

      猜你喜欢
      • 2021-02-20
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      • 2019-03-16
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多