训练与测试时同一组测试集结果不一致,相当于训练的模型不能后续使用了,这肯定不能容忍,所以耗费经历筛查:
1. 随机种子的设置问题
可在main函数加上这个:
SEED = 1
np.random.seed(SEED)
torch.manual_seed(SEED)
torch.cuda.manual_seed_all(SEED)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
但是我在数据加载的地方也用到了np.random函数,所以要在数据加载的init函数里加上:
SEED = 1
np.random.seed(SEED)
2. 存储整个模型,而不是用state_dict()
torch.save(model, path) #存储
model = torch.load(path) #加载,不用事先定义模型
3.数据预处理不一致
数据预处理阶段用到了 np.random.normal,如果测试时重新加载数据的话,模型效果就会变差。
需要保证数据预处理是一致的,最好的方法就是只处理一次数据,然后将处理后的数据保存到文件,多次运行模型时直接调用该数据文件。
这个改正后,重新加载测试与train后测试的结果完全一样。
4. model.eval()
测试之前一定要用