【问题标题】:How to get probabilities from Resnet using pytorch?如何使用 pytorch 从 Resnet 获取概率?
【发布时间】:2018-12-19 20:11:48
【问题描述】:

我正在对具有多个标签的数据集微调 resnet。

我想将分类层的“分数”转换为概率,并使用这些概率来计算训练中的损失。

您能否为此提供示例代码? 我可以这样使用吗:

       P = net.forward(x)
       p = torch.nn.functional.softmax(P, dim=1)
       loss = torch.nn.functional.cross_entropy(P, y)

我不清楚这是否是正确的方法,因为我将概率作为交叉熵损失的输入。

【问题讨论】:

    标签: deep-learning conv-neural-network pytorch


    【解决方案1】:

    所以,你正在训练一个model,即在 pytorch 中具有交叉熵的 resnet。您的损失计算如下所示。

    logit = model(x)
    loss = torch.nn.functional.cross_entropy(logits=logit, target=y)
    

    在这种情况下,你可以通过做来计算所有类的概率,

    logit = model(x)
    p = torch.nn.functional.softmax(logit, dim=1)
    # to calculate loss using probabilities you can do below 
    loss = torch.nn.functional.nll_loss(torch.log(p), y)
    

    请注意,如果您使用概率,则必须手动获取log,这对于数字原因是不好的。相反,请使用log_softmaxcross_entropy,在这种情况下,您最终可能会分别使用交叉熵和计算概率来计算损失。

    【讨论】:

    • 我想将我的“分数”转换为概率,并使用这些概率来计算训练中的损失。
    • 感谢您的回复。我已经更新了这个问题。请看一看。
    猜你喜欢
    • 2020-10-03
    • 2020-02-24
    • 2016-04-04
    • 2016-10-03
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2021-11-04
    相关资源
    最近更新 更多