【发布时间】:2020-03-05 02:00:55
【问题描述】:
我是 Pytorch 的新手。我训练并测试了一个线性分类器(nn.Linear),它的图像数据集有 8 个类别,batch_size = 35。 在测试时,我想看看给定图像属于这 8 个类别中的任何一个的概率是多少。这就是我打印 output.data 变量的原因。但是这些数字都在 1 以上,并且它们的总和不等于 1。(我附上了测试代码) 那么,我的问题是这些数字是什么意思?
谢谢!
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))
【问题讨论】:
-
可以发一下模型类吗?
-
线性分类器仍然可以(并且可能应该)包含 Softmax。参见例如this Wikipedia article.
-
这种问题建议你也许应该回到基础,了解你在做什么,而不是仅仅使用它。请考虑一下。
-
那么,output.data 是否给了我 softmax 向量?如果是,为什么我的概率会高于 1?
-
nn.CrossEntropyLoss标准假设向其提供了非软最大网络输出。它有效地应用了 softmax,然后是负对数似然损失。将它们结合起来的原因是因为单独的 softmax 在数值上不是很稳定,并且可以以更稳定的方式同时计算这两个操作。如果您想要一个有效的分布,您应该将 softmax 应用于输出,但不应直接将 softmax 应用于您在训练时发送到标准的向量。此外,softmax 保留顺序,因此如果您只对 argmax 感兴趣,则不需要 softmax。
标签: python classification pytorch