输入图片,每次的准确率都不一样,一会77,一会30。前面也加了model.eval(),这是为什么呢?


可以用torchscript转一下看看推理效果。如果不好使可以弄fix seed,但是如果fixseed发现结果一样的,说明可能有随机函数在里面....


可能你的dropout没有关掉


这个问题是bug问题,需要根据你的代码一点点排查一般的思路分为一下几个部分:

1. 你需要确定你的模型是否正常载入:首先检查你的模型载入是否是自适应程序,如果你是使用load_state_dict(torch.load(…))来载入,那路径出错或者是参数问题就会载入模型报错,载入失败,这样可以保证你模型一定是载入正确;如果你是采用读取载入预模型和当前模型参数匹配的载入方式,这就会导致一旦你如果载入错误路径等不会提示错误;还有一种情况是你如果选用多GPU 训练和单GPU 训练因为net = torch.nn.DataParallel(model)这个函数会使模型参数键名字改变;

2. 确保测试读取数据:这个需要检查模型测试集读取路径是否正常,输入格式是否和训练集一致等问题,可以通过列印保证送入模型前数据是相同的;

3.在测试的时候加上使用torch.no_grad可以节约内存,不进行计算梯度;

4.确保你模型的是否包含随机数和随机变数:此方法需要再次检查模型,检查你在数据读取,数据预处理地方是否存在随机操作,模型本身是否也有一些随机参数!


差这么多肯定不是随机数种子的问题了,你能把问题描述的更清楚一点吗,比如你数据有多少


你在test里加了随机augmentation


1、仔细梳理一下测试逻辑,看看有没有随机的步骤;

2、把所有随机种子全部设置好,包括random,np.random,torch.random等等;

好好检查一下,流程固定的情况下,pytorch的输出一定是确定的。


如果是相同的测试集,那测试逻辑应该有bug。模型一旦固定对相同的输入会产生相同的值。相当于定义好公式,传值得到的结果不会变化。

如果是每次训练模型在预测,需要设置好随机种子。


训练过程有dropout,预测过程不要dropout. 问题就可以解决了


torch。nograd


推荐阅读:
相关文章