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
相关产品推荐
相关产品推荐

