pytorch图像分类模型在测试时精度变差

因为平时工作时喜欢把一些记录记到自己one note里,所以本人很少写文章,不过最近在工作中踩了一些坑,想来想去还是把一些问题记录在CSDN里跟好,一是方便日后查看,二是也许可能帮助到别人。

我在使用pytorch做一个图像分类的实验,在训练时使用batch_size = 64 在预训练模型上进行训练,在训练期间,模型在train data以及 val data上都有不错的表现,然后当模型训练完成后,在test data上也进行了测试,同样得到了较好的表现。但是在测试单张图片分类时,就发生了奇怪的现象,发现模型精度非常差。所以各种找问题,找原因,最后终于找到原因所在:导致单张图片测试精度变差的原因就是忘记在测试时对模型加入 model.evel() 方法。

说起来感觉比较简单低级的错误,但确实发生在不经意间,究其原因主要是我在test方法上加上了【@torch.no_grad()】的注解,如下:

@torch.no_grad()
def test(self):
    pass  # 后续任务

因为加上了该注解后,可以使model不在进行梯度计算以及反向传播,但是就是因为加上了该注解使我忽略了BN层的参数,在使用 y = model(x)进行前向计算时,model自动计算了BN层的参数,最终导致精度变差。

你可能感兴趣的:(神经网络,pytorch,图像分类,pytorch,深度学习,机器学习)