pytorch加载的模型测试的结果和保存时测试的结果不一致
生活随笔
收集整理的这篇文章主要介绍了
pytorch加载的模型测试的结果和保存时测试的结果不一致
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
假设有一个dropout网络net,训练过程中用测试集进行了测试,接着将该网络进行了保存
torch.save(net.state_dict(), path)然后将保存的网络加载出来:
net=class_net() # 先定义net的结构 net.load_state_dict(torch.load(path))接着用同样的测试集进行测试,发现测试结果和保存时的结果不一致,这是因为dropout网络会对神经元进行随机失活,因此测试结果也会不一致。解决方法是在测试函数eval()中设置随机种子:
torch.manual_seed(42) if self.cuda:torch.cuda.manual_seed(42)注意一点,不能在dropout网络的训练函数/前向传播函数forward()中设置随机种子,否则每次前向传播失活的神经元都是一样的,失去了dropout的随机性。而在测试函数eval()中设置随机种子并不影响网络的训练,因为eval()函数不包含网络的训练过程。
总结
以上是生活随笔为你收集整理的pytorch加载的模型测试的结果和保存时测试的结果不一致的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: LaTeX常见文件类型
- 下一篇: pytorch自定义卷积核权值参数