如何使用pytorch从Resnet获取概率?

时间:2018-07-11 17:36:43

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

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

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

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

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.windows.create({
        height: 400,
        width:400,
        url: chrome.runtime.getURL("../popup.html"),
      type: "popup"
    });
});

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

1 个答案:

答案 0 :(得分:3)

因此,您正在训练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,在这种情况下,您可能最终会使用交叉熵和计算概率来计算损失。