pytorch 测试模型时取不同的batchsize会由不同的正确率

问题: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()

你可能感兴趣的:(pytorch,深度学习,人工智能)