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

导入KerasClassifier时出现ModuleNotFoundError问题求助

解决KerasClassifier导入失败的问题

问题根源

Keras 3.x及以上版本已移除keras.wrappers和tensorflow.keras.wrappers模块,这是导致导入报错的核心原因。以下是几种可行的解决方法:


  • 先确认当前Keras版本
    运行代码查看版本,确认是否为3.x及以上:
    import keras
    print(keras.__version__)
    

  • 方案1:使用官方替代工具keras.utils.wrap_model
    这是Keras官方推荐的替代方案,用于将Keras模型适配为scikit-learn兼容接口:
    from keras.utils import wrap_model
    from sklearn.model_selection import cross_val_score
    from keras.models import Sequential
    from keras.layers import Dense
    
    # 定义你的Keras模型
    def create_model():
        model = Sequential()
        model.add(Dense(12, input_shape=(8,), activation='relu'))
        model.add(Dense(1, activation='sigmoid'))
        model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
        return model
    
    # 包装模型以适配scikit-learn接口
    model = create_model()
    wrapped_model = wrap_model(model, input_shape=(8,))
    
    # 后续可直接使用scikit-learn的方法(例如交叉验证)
    # scores = cross_val_score(wrapped_model, X, y, cv=5)
    

  • 方案2:自定义适配scikit-learn的分类器类
    若需要更灵活的控制逻辑,可手动实现scikit-learn的接口规范:
    from sklearn.base import BaseEstimator, ClassifierMixin
    from keras.models import Sequential
    from keras.layers import Dense
    import numpy as np
    
    class KerasClassifier(BaseEstimator, ClassifierMixin):
        def __init__(self, build_fn, epochs=10, batch_size=32):
            self.build_fn = build_fn
            self.epochs = epochs
            self.batch_size = batch_size
            self.model = None
    
        def fit(self, X, y):
            self.model = self.build_fn()
            self.model.fit(X, y, epochs=self.epochs, batch_size=self.batch_size, verbose=0)
            return self
    
        def predict(self, X):
            predictions = self.model.predict(X, verbose=0)
            # 适配二分类和多分类场景
            return np.argmax(predictions, axis=1) if predictions.shape[1]>1 else (predictions > 0.5).astype(int).flatten()
    
        def score(self, X, y):
            _, accuracy = self.model.evaluate(X, y, verbose=0)
            return accuracy
    
    # 使用示例
    def create_model():
        model = Sequential()
        model.add(Dense(12, input_shape=(8,), activation='relu'))
        model.add(Dense(1, activation='sigmoid'))
        model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
        return model
    
    clf = KerasClassifier(build_fn=create_model, epochs=20, batch_size=16)
    # clf.fit(X_train, y_train)
    # print(clf.score(X_test, y_test))
    

  • 方案3:降级到旧版Keras
    如果必须保留原导入逻辑,可以降级到Keras 2.x版本(需匹配对应TensorFlow版本):
    pip install keras==2.15.0 tensorflow==2.15.0
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:15:02