【问题标题】:How to use PyTorch to print out the prediction accuracy of every class?如何使用 PyTorch 打印出每个类的预测准确率?
【发布时间】:2018-05-15 17:11:37
【问题描述】:

我正在尝试使用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()

例如,epoch 1/1 的输出是:

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

running_corrects := 2 + 2

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

那里有什么问题? 希望有人能指出我的错误并教我如何正确地做到这一点。

谢谢!

【问题讨论】:

    标签: python machine-learning computer-vision pytorch


    【解决方案1】:

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

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

    代码:

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

    改为:

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

    完成!

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2023-02-16
      • 2019-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 2019-07-26
      相关资源
      最近更新 更多