如何使用PyTorch打印出每个班级的预测准确度?

时间:2018-05-15 17:11:38

标签: python machine-learning computer-vision pytorch

我正在尝试使用PyTorch根据官方教程打印出每个班级的预测准确性link

但事情似乎出了问题。我的代码打算做这项工作如下:

    for epoch in range(num_epochs):

    # Each epoch has a training and validation phase
    for phase in ['train', 'val']:
       ... (this is given by the tutorial)

    (my code)

    class_correct = list(0. for i in range(3))
    class_total = list(0. for i in range(3))

    for data in dataloaders['val']:
        images, labels = data
        outputs = model(inputs)
        _, predicted = torch.max(outputs.data, 1)
        c = (predicted == labels.data).squeeze()

        for i in range(4):
            label = labels.data[i]
            class_correct[label] += c[i]
            class_total[label] += 1

    for i in range(3):
        print('Accuracy of {} : {} / {} = {:.4f} %'.format(i, 
class_correct[i], class_total[i], 100 * class_correct[i].item() / 
class_total[i]))

    print(file = f)
    print()

例如,纪元1/1的输出是: enter image description here

我认为应该满足以下等式:

  

running_corrects:= 2 + 2

但事情并没有像我想的那样发生。

那里有什么问题? 希望有人可以指出我的错,并告诉我如何正确地做到这一点。

THX!

1 个答案:

答案 0 :(得分:0)

最后,我解决了这个问题。首先,我比较了两个模型的参数,发现它们是相同的。所以我确认模型是一样的。然后,我检查了两个输入,并惊讶地发现它们是不同的。

所以我仔细检查了两个模型的输入,答案是传递给第二个模型的参数确实更新。

代码:

for data in dataloaders['val']:
    images, labels = data
    outputs = model(inputs)

更改为:

for data in dataloaders['val']:
    inputs, labels = data
    outputs = model(inputs)

完成!