You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义损失函数时Keras绘制Epoch MSE遇KeyError的解决方法

解决Keras绘制训练MSE时出现KeyError: 'mse'的问题

首先看你代码里的一个明显问题:你用model.compile(...)配置了损失和指标,但训练的是model3.fit(...)——这两个模型对象如果不是同一个实例的话,model3根本没设置metrics=['mse'],它的训练历史里自然不会有'mse'这个键,这大概率是报错的根源!

先修正这个笔误:确保你编译和训练的是同一个模型,比如把编译语句改成model3.compile(loss=new_loss2, metrics=['mse'], optimizer=opt),或者统一模型变量名。

如果修正后还是出现这个错误,那就是Keras版本的指标键名差异导致的:在TensorFlow集成的Keras(也就是现在常用的tf.keras)中,当你指定metrics=['mse']时,训练历史里的键名其实是全称'mean_squared_error',而不是简写的'mse'。旧版独立的Keras可能用'mse'作为键名,但新版TF-Keras会使用指标的标准名称。

你可以先打印训练历史的所有键,确认正确的名称:

print(hist.history.keys())

输出应该类似这样:

dict_keys(['loss', 'mean_squared_error', 'val_loss', 'val_mean_squared_error'])

接下来就可以用正确的键名绘制MSE曲线了,比如同时绘制训练集和验证集的MSE:

import matplotlib.pyplot as plt

# 绘制训练集MSE
plt.plot(hist.history['mean_squared_error'])
# 绘制验证集MSE(如果有验证集的话)
plt.plot(hist.history['val_mean_squared_error'])
plt.title('Model Mean Squared Error')
plt.ylabel('MSE')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='upper right')
plt.show()

总结一下报错的两个核心原因:

  • 编译和训练的模型对象不一致,导致指标未被配置
  • TF-Keras中指标简写会被映射为全称键名,而非简写

内容的提问来源于stack exchange,提问作者Hajar Elhammouti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:33:40