Python 如何获得每个图像属于一个类的概率

Python 如何获得每个图像属于一个类的概率,python,classification,pytorch,Python,Classification,Pytorch,我是个新手。我训练并测试了一个线性分类器(nn.linear),该分类器具有8个类别的图像数据集,批大小=35。 在测试过程中,我想看看给定图像属于这8类中任何一类的概率是多少。这就是我打印output.data变量的原因。但这些数字都在1以上,它们的总和不是1。(I随附测试代码) 那么,我的问题是这些数字意味着什么 谢谢 correct = 0 total = 0 with torch.no_grad(): for data in dataloaders['test']:

我是个新手。我训练并测试了一个线性分类器(nn.linear),该分类器具有8个类别的图像数据集,批大小=35。 在测试过程中,我想看看给定图像属于这8类中任何一类的概率是多少。这就是我打印output.data变量的原因。但这些数字都在1以上,它们的总和不是1。(I随附测试代码) 那么,我的问题是这些数字意味着什么

谢谢

correct = 0
total = 0
with torch.no_grad():
    for data in dataloaders['test']:
        images, labels = data[0].to(device), data[1].to(device)
        outputs = model(images)
        print(outputs.data)

        _, predicted = torch.max(outputs.data, 1)
        print(predicted)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()
print('Accuracy of the network on the 4000 test images: %d %%' % (
100 * correct / total))

你可以得到logits作为神经网络的输出

在输出上使用
torch.nn.Softmax
将值压缩到(0,1)范围内


顺便说一句,你的网络应该输出Logit,因为pytorch的损耗(
torch.nn.CrossEntropyLoss在本例中为
)设计用于在数值稳定的情况下使用它们。

你可以发布模型类吗?线性分类器仍然可以(可能应该)包含Softmax。看,例如,这类问题建议你也许应该回到基础上来,理解你在做什么,而不是仅仅使用它。请考虑这个问题,输出数据是否给了我SOFTMAX向量?如果是,为什么我的概率会高于1?
nn.CrossEntropyLoss
标准假设为它提供了未最大化的网络输出。它有效地应用了softmax,然后是负对数似然损失。它将它们结合在一起的原因是,单独使用softmax在数值上不太稳定,并且可以以更稳定的方式同时计算这两个操作。如果需要有效的分布,则应将softmax应用于输出,但不应直接将softmax应用于训练时发送到标准的向量。此外,softmax保留订单,因此如果您只对argmax感兴趣,则不需要softmax。