python - Keras:model.prediction 与 model.evaluation 损失不匹配
问题描述
我应用了本教程https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/23_Time-Series-Prediction.ipynb(在不同的数据集上),该教程没有计算单个输出的均方误差,所以我在比较函数中添加了以下行:
mean_squared_error(signal_true,signal_pred)
但是预测的损失和mse与模型的损失和mse不同。对测试数据的评估。model.evaluation(损失,mae,mse)(测试集)的错误:
[0.013499056920409203, 0.07980187237262726, 0.013792216777801514]
来自单个目标(输出)的错误:
Target0 0.167851388666284
Target1 0.6068108648555771
Target2 0.1710370357827747
Target3 2.747463225418181
Target4 1.7965991690103074
Target5 0.9065426398192563
我认为这可能是训练模型的问题,但我找不到它到底在哪里。我将衷心感谢您的帮助。
谢谢
解决方案
有很多原因会导致训练损失和评估损失之间存在差异。
- 某些操作,例如批量标准化,在预测时被禁用 - 这可能会对某些架构产生很大的影响,尽管如果您正确使用批量规范,通常不应该这样做。
- 用于训练的 MSE 在整个 epoch 上取平均值,而评估只发生在模型的最新“最佳”版本上。
- 如果拆分不是随机的,则可能是由于数据集的差异。
- 您可能在没有意识到的情况下使用了不同的指标。
我不确定你到底遇到了什么问题,但它可能是由很多不同的事情引起的,而且通常很难调试。
推荐阅读
- javascript - 单个正则表达式从多行输入中删除空行和双空格
- r - 在 R 中以简单的方式重新排列我的 2x2 矩阵的麻烦
- c# - ASP.NET Core Web 应用程序找不到 cookie 值。我错过了什么?
- python-3.x - 以引号开头的 Pandas 字符串问题
- postgresql - 如何使 Instaclustr Kafka Sink Connector 与 Avro 序列化值一起使用到 postgres?
- flutter - 如何修复flatbutton中倒置的“ok”文本?
- git - 如何找到 npm 版本的 git 哈希?
- wix - WiX 安装在与标准 ProgramFilesFolder 名称不同的驱动器上
- c# - 服务器端 Blazor 中单个 EditForm 中的多个模型验证
- sql - 根据字符串列从多条记录中获取记录