如果测试集的dataloader中的参数batch_size设置不是整个测试集的个数时模型在测试集上表现很差相当与胡乱预测,当batch_size设置成整个测试集个数时表现正常。代码检查没有什么问题,猜测是pytorch出现了bug
pytorch在测试集上评估模型准确率的时候要注意一个点,需要把模型从train状态转换成eval状态,因为pytorch的梯度是累积的,所以才会出现你说的batch_size如果是整个数据集大小的时候,表现正常,反之则不正常,这个不是bug
下面是我自己之前封装的一个准确率评估代码片段:
# 计算Acc
def calc_acc(net, dataloader, device):
net.eval()
total = 0.0
correct = 0.0
with torch.no_grad():
for data in dataloader:
images, labels = data[0].to(device), data[1].to(device)
outputs = net(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
# print('-----', correct)
# print('-----', total)
print('Accuracy of the network on the dataset: %.4f %%' % (
100.0 * correct / total))
return 100.0 * correct / total