我正在尝试使用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()
我认为应该满足以下等式:
running_corrects:= 2 + 2
但事情并没有像我想的那样发生。
那里有什么问题? 希望有人可以指出我的错,并告诉我如何正确地做到这一点。
THX!
答案 0 :(得分:0)
最后,我解决了这个问题。首先,我比较了两个模型的参数,发现它们是相同的。所以我确认模型是一样的。然后,我检查了两个输入,并惊讶地发现它们是不同的。
所以我仔细检查了两个模型的输入,答案是传递给第二个模型的参数确实不更新。
代码:
for data in dataloaders['val']:
images, labels = data
outputs = model(inputs)
更改为:
for data in dataloaders['val']:
inputs, labels = data
outputs = model(inputs)
完成!