我正在尝试根据官方教程链接使用PyTorch来打印每个类的预测准确率
但事情似乎出了问题。我用来做这项工作的代码如下:
for epoch in range(num_epochs): # 每个epoch有一个训练和验证阶段 for phase in ['train', 'val']: ... (这是教程提供的) (我的代码) 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()
我认为以下等式应该成立:
running_corrects := 2 + 2
但事情并没有如我所想的那样发生。
哪里出了问题?希望有人能指出我的错误并教我如何正确地做这件事。
谢谢!
回答:
最后,我解决了这个问题。首先,我比较了两个模型的参数,发现它们是相同的。因此,我确认了模型是相同的。然后,我检查了两个输入,惊讶地发现它们是不同的。
所以我仔细回顾了两个模型的输入,发现答案是传递给第二个模型的参数没有更新。
代码:
for data in dataloaders['val']: images, labels = data outputs = model(inputs)
更改为:
for data in dataloaders['val']: inputs, labels = data outputs = model(inputs)
完成!