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

使用KerasClassifier时如何计算测试集损失与准确率

问题原因

KerasClassifier是scikit-learn接口的封装类,本身不具备原生Keras模型的evaluate()方法,交叉验证返回的results['estimators']里存的都是训练后的KerasClassifier封装实例,直接调用Keras原生方法自然会报错。

正确实现方法

封装器内部把训练好的原生Keras模型存在model属性中,先提取这个原生模型,再调用evaluate()即可。

步骤1:提取最优折对应的原生Keras模型

# best_model是你从results['estimators']筛选出的最优KerasClassifier实例
best_tf_model = best_model.model

步骤2:在测试集上执行评估,获取损失和指标

# evaluate返回值顺序和你模型compile时指定的loss、metrics顺序完全一致
# 示例:如果你的模型编译时写的是model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
test_loss, test_acc = best_tf_model.evaluate(x_test, y_test, batch_size=8, verbose=1)
print(f"测试集损失值:{test_loss:.4f}")
print(f"测试集准确率:{test_acc:.4f}")
补充说明
  • 预测场景可以按需选择接口:
    • 要直接输出类别标签(sklearn风格输出):直接调用封装器的best_model.predict(x_test)即可
    • 要输出预测概率:调用原生模型的best_tf_model.predict(x_test)
  • 不要直接使用你最开始初始化的全局KerasClassifier实例做评估/预测:交叉验证过程中每折都会重新初始化、独立训练新的封装器实例,你初始定义的model对象没有经过任何训练,输出结果完全无效。
  • 如果编译模型时传入了多个指标(比如precision、recall、f1等),按compile时metrics参数的传入顺序依次接收evaluate()的返回值即可。

内容的提问来源于stack exchange,提问作者Luigi Montaleone

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:24:22