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

导入KerasClassifier遇ModuleNotFoundError的解决问询

解决ModuleNotFoundError: No module named 'tensorflow.keras.wrappers'问题

在VSCode中导入KerasClassifier时出现以下错误:

ModuleNotFoundError                       Traceback (most recent call last)
Cell In[7], line 1
1 from tensorflow.keras.wrappers.scikit_learn import KerasClassifier

ModuleNotFoundError: No module named 'tensorflow.keras.wrappers'

解决方案

方案1:使用独立Keras的Scikit-learn封装

TensorFlow 2.10及以上版本移除了tensorflow.keras.wrappers模块,可改用独立Keras库中的封装:

  1. 安装依赖:
pip install keras scikit-learn
  1. 修改导入语句:
# 替换原导入
from keras.wrappers.scikit_learn import KerasClassifier

后续代码无需其他修改,原有的KerasClassifier调用逻辑保持不变。

方案2:自定义Scikit-learn兼容封装器

若不想安装额外库,可手动实现适配Scikit-learn接口的封装类,替代KerasClassifier:

from sklearn.base import BaseEstimator, ClassifierMixin

class CustomKerasClassifier(BaseEstimator, ClassifierMixin):
    def __init__(self, lstm_units=50, learning_rate=0.01, epochs=10, batch_size=32, verbose=1):
        self.lstm_units = lstm_units
        self.learning_rate = learning_rate
        self.epochs = epochs
        self.batch_size = batch_size
        self.verbose = verbose
        self.model = None

    def create_model(self):
        model = Sequential()
        model.add(LSTM(self.lstm_units, activation='relu', input_shape=(5, 9)))
        model.add(Dense(580, activation='softmax'))
        optimizer = Adam(learning_rate=self.learning_rate)
        model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])
        return model

    def fit(self, X, y, **kwargs):
        self.model = self.create_model()
        self.model.fit(X, y, epochs=self.epochs, batch_size=self.batch_size, verbose=self.verbose, **kwargs)
        return self

    def predict(self, X):
        return self.model.predict(X, batch_size=self.batch_size, verbose=self.verbose)

    def score(self, X, y, **kwargs):
        loss, accuracy = self.model.evaluate(X, y, batch_size=self.batch_size, verbose=self.verbose, **kwargs)
        return accuracy

然后修改代码中的模型初始化部分:

# 替换原KerasClassifier初始化
model = CustomKerasClassifier(epochs=10, batch_size=32, verbose=1)

param_grid = {'lstm_units': [30, 50, 70], 'learning_rate': [0.001, 0.01, 0.1]}

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1, cv=3)
grid_result = grid.fit(X, y)

验证修改

运行修改后的代码,即可正常使用GridSearchCV进行超参数调优,逻辑与原代码一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:07:31