问题:pytorch 测试模型时取不同的batchsize会由不同的正确率
之前:pytorch 测试模型时只用了 with torch.no_grad(),如下图
with torch.no_grad(): # 下面是没有梯度的计算,主要是测试集使用,不需要再计算梯度了 model = ResNet18(ResidualBlock, [2, 2, 2, 2]).to(device) # 调用网络 model_paras_path = './weights/resnet_params.pth'
改正:一定要加model.eval(),如下
with torch.no_grad(): # 下面是没有梯度的计算,主要是测试集使用,不需要再计算梯度了 model = ResNet18(ResidualBlock, [2, 2, 2, 2]).to(device) # 调用网络 model.eval() model_paras_path = './weights/resnet_params.pth'
分析:torch.no_grad()不会屏蔽dropout 和batch normalization,当网络采用batch normalization时,若只使用torch.no_grad(),不同的batchsize会造成不同的batch normalization结果,故影响测试精度,所以一定要用model.eval()