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

KerasRegressor报错ValueError:无法识别loss标识符的原因排查

问题分析与解决

错误原因

这个ValueError: could not interpret identifier: loss错误的核心是Scikeras与Keras的指标处理逻辑冲突:

  • 你在build_model函数中已经通过model.compile(optimizer='adam', loss='mean_squared_error')指定了损失函数
  • 同时在初始化KerasRegressor时又传递了metrics=['mean_squared_error']参数
  • Scikeras内部会自动将模型的损失函数(loss)加入到监控指标列表中,但Keras并不把loss视为可识别的metric标识符,因此触发解析错误。

解决方法

两种可行修复方案,任选其一即可:

方案1:移除KerasRegressor的metrics参数

既然后续会用Scikit-learn的mean_squared_error手动评估模型,无需在KerasRegressor中指定监控指标。修改代码如下:

# 原代码
# model = KerasRegressor(model=build_model, epochs=100, batch_size=10, verbose=0, metrics=['mean_squared_error'])

# 修改后
model = KerasRegressor(model=build_model, epochs=100, batch_size=10, verbose=0)

方案2:将metrics移到模型compile步骤中

如果需要在训练过程中监控指标,把metrics参数放在build_model的model.compile里,而非KerasRegressor的参数中:

def build_model():
    input_shape = X_train_preprocessed.shape[1]
    model = Sequential([
        Input(shape=(input_shape,)),
        Dense(128, activation='relu'),
        Dense(64, activation='relu'),
        Dense(1)
    ])
    # 在这里添加metrics参数
    model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mean_squared_error'])
    return model

# 移除KerasRegressor中的metrics参数
model = KerasRegressor(model=build_model, epochs=100, batch_size=10, verbose=0)

验证修改

修改后重新运行代码,模型会正常训练,后续的RMSE计算也能正常执行。

内容的提问来源于stack exchange,提问作者duane gadama

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:51:10