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

结合GridSearchCV、Pipeline时Keras Functional模型predict调用报错

问题1:Pipeline无法调用predict的原因

该报错与Pipeline实例本身无关,根因是TensorFlow 2.6及以上版本移除了tf.keras.Model(包含Functional结构模型)的predict_classes方法。你使用的KerasClassifier属于旧版本scikit-learn兼容包装器,它的predict方法默认会调用底层Keras模型的predict_classes获取分类结果,而你用的Functional结构模型不存在该方法,因此抛出属性错误。

问题2:获取预测结果的解决方案

可选用以下任意一种方式解决:

  • 方案一:调用predict_proba后手动转换分类结果
    二分类场景下直接替换cv.predict(X_test)的代码即可:

    # 获取所有样本的分类概率
    y_pred_proba = cv.predict_proba(X_test)
    # 以0.5为阈值划分类别,可根据实际需求调整阈值
    y_predicted = (y_pred_proba[:, 1] >= 0.5).astype(int)
    

    该方案无需修改原有封装逻辑,还可灵活调整分类阈值适配不平衡数据集等特殊场景。

  • 方案二:自定义兼容新版TensorFlow的分类器包装器
    如果你需要保留scikit-learn风格的predict调用逻辑,可重写KerasClassifier的predict方法:

    from tensorflow.keras.wrappers.scikit_learn import KerasClassifier as BaseKerasClassifier
    
    class CustomKerasClassifier(BaseKerasClassifier):
        def predict(self, x, **kwargs):
            proba = self.model.predict(x, verbose=0)
            if proba.shape[-1] > 1:
                return proba.argmax(axis=-1)
            return (proba >= 0.5).astype(int).reshape(-1)
    

    后续将原有代码中的KerasClassifier替换为CustomKerasClassifier,即可正常调用cv.predict(X_test)获取分类结果。

内容的提问来源于stack exchange,提问作者Chrissi.k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:57:04