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

keras.wrappers模块缺失,求GridSearchCV优化LSTM模型的替代方案

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

问题原因

keras.wrappers.scikit_learn模块在TensorFlow整合Keras后已被迁移,单独的Keras包也不再维护该模块。目前有两种靠谱的替代方案:


方案1:使用TensorFlow自带的Scikit-learn wrapper

TensorFlow的Keras模块内置了兼容scikit-learn的wrapper,只需调整导入路径即可:

  1. 修改所有Keras相关的导入语句,统一使用tensorflow.keras路径
  2. 补全缺失的Sequential导入
  3. 替换KerasRegressor的导入来源

修改后的完整代码:

from tensorflow.keras.layers import Dense, LSTM, Dropout
from tensorflow.keras import optimizers
from tensorflow.keras.models import Sequential  # 补全导入

from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasRegressor

def create_model(unit, dropout_rate, lr ):
    model=Sequential()
    model.add(LSTM(unit,return_sequences=True, input_shape=(1,5)))
    model.add(Dropout(dropout_rate))
    model.add(LSTM(unit))
    model.add(Dropout(dropout_rate))
    model.add(Dense(1))
    adam= optimizers.Adam(learning_rate=lr)  # 新版Adam推荐用learning_rate参数,旧版lr也兼容
    model.compile(optimizer=adam, loss='mean_squared_error')

    return model

my_regressor = KerasRegressor(build_fn=create_model, verbose=2)

grid_param_LSTM = {
    'unit':   [50, 70, 120],
    'batch_size': [12, 24, 48],
    'epochs': [200],
    'lr': [0.001, 0.01, 0.1],
    'dropout_rate':[0.1, 0.2, 0.3]
}

grid_GBR = GridSearchCV(estimator=my_regressor, param_grid = grid_param_LSTM, scoring = 'neg_root_mean_squared_error',  cv = 2)
grid_GBR.fit(X_train, y_train)

print("Best: %f using %s" % (grid_GBR.best_score_, grid_GBR.best_params_))

方案2:使用Scikeras(推荐)

Scikeras是专门为scikit-learn和Keras/TensorFlow打造的兼容库,维护更活跃,功能更完善,官方也更推荐使用它替代旧的Keras wrapper:

  1. 先在Colab中安装Scikeras:
!pip install scikeras
  1. 修改导入语句,调整KerasRegressor的参数(新版用model替代build_fn)

修改后的完整代码:

from tensorflow.keras.layers import Dense, LSTM, Dropout
from tensorflow.keras import optimizers
from tensorflow.keras.models import Sequential

from sklearn.model_selection import GridSearchCV
from scikeras.wrappers import KerasRegressor

def create_model(unit, dropout_rate, lr ):
    model=Sequential()
    model.add(LSTM(unit,return_sequences=True, input_shape=(1,5)))
    model.add(Dropout(dropout_rate))
    model.add(LSTM(unit))
    model.add(Dropout(dropout_rate))
    model.add(Dense(1))
    adam= optimizers.Adam(learning_rate=lr)
    model.compile(optimizer=adam, loss='mean_squared_error')

    return model

# 注意:Scikeras推荐用model参数替代build_fn
my_regressor = KerasRegressor(model=create_model, verbose=2)

grid_param_LSTM = {
    'unit':   [50, 70, 120],
    'batch_size': [12, 24, 48],
    'epochs': [200],
    'lr': [0.001, 0.01, 0.1],
    'dropout_rate':[0.1, 0.2, 0.3]
}

grid_GBR = GridSearchCV(estimator=my_regressor, param_grid = grid_param_LSTM, scoring = 'neg_root_mean_squared_error',  cv = 2)
grid_GBR.fit(X_train, y_train)

print("Best: %f using %s" % (grid_GBR.best_score_, grid_GBR.best_params_))

额外提示

  • 新版TensorFlow的Adam优化器推荐使用learning_rate参数替代旧的lr,不过旧参数也能兼容
  • 确保你的Colab环境中TensorFlow版本是2.x,目前Colab默认就是2.x版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:33:29