deep-learning - PyTorch 加载中的 eval 方法
问题描述
我今天有一个奇怪的经历。我在 PyTorch 中训练了一个模型,然后用测试样本对其进行了测试。在这一步中,我得到了很好的结果(想象一下 X)。然后我保存模型并加载模型,看看我可以得到与保存的模型相同的结果(X)。不幸的是,加载模型后,结果更差(不是 X)。我测试了这些(请不要讨论它们)来解决问题:
- 我用不同的方法保存 --> 整个模型,参数字典
- 在训练和测试中播种相同的随机化
- 从 CPU 切换到 GPU 并返回
- 使用零级等
最后,我可以找出问题所在。问题是我应该在加载模型步骤中关闭评估。这意味着在加载部分,我不需要使用 torch.eval()。我知道 eval() 在训练和评估模式中对 Dropout 层等的影响。
我的问题是,当我的模型中没有 dropout 层时,为什么 torch.eval() 反过来对我有用?我的模型中有 BatchNormalization,我在 PyTorch 网站上找不到 eval() 方法对 BatchNorm 和 DropOut 的影响。
一般来说,我的问题是我在加载模型部分读到,我应该使用 eval() 模式。但是,为什么在我的情况下,情况恰恰相反?
解决方案
推荐阅读
- php - 联系表格 7 - 获取最终邮件 HTML 输出
- java - 从响应(okHttp3)下载pdf - JAVA spring boot / display on browser
- json - 如何在 Scala 中序列化和反序列化 Json 的特征?
- python - 具有优化性能的 HDD 上 40 TB FIFO
- xcode - 无法将 pod 文件添加到 Xcode 13 项目
- git - 使用本地挂钩更改 --push-option
- r - 从几何中添加城市名称
- javascript - rails选择数量javascript获取类不工作索引
- java - 如何在swing jtable中仅编辑第一行和最后一列单元格(不是所有单元格)的一个单元格
- python - 我正在将 Discord 机器人转换为 Python,但我的命令中不断出现错误 帮助我