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

使用KerasRegressor与GridSearchCV进行LSTM模型网格搜索时遭遇TypeError:缺少必需参数optimizer

KerasRegressor与GridSearchCV进行LSTM模型网格搜索时遭遇TypeError:缺少必需参数optimizer

嘿,我仔细看了你的代码和报错信息,这个TypeError的原因其实很清晰——你的create_lstm_model函数要求必须传入optimizer、neurons、activation三个必填参数,但在初始化KerasRegressor的时候,你只指定了neurons和activation的默认值,漏掉了optimizer,导致网格搜索在尝试生成模型实例时找不到这个必需参数,直接触发了错误。

先给你理清楚问题核心:

  • 你的create_lstm_model没有给参数设置默认值,调用时必须传入三个参数;
  • 你初始化KerasRegressor时只传了neurons=8和activation='relu',没给optimizer赋值;
  • 虽然param_grid里包含了optimizer的候选值,但网格搜索是基于KerasRegressor的初始参数去替换的,初始时缺少必填参数的话,根本走不到参数替换那一步。

下面给你两种修复方案,选哪种都可以:

方案一:给模型函数的参数设置默认值

修改create_lstm_model,给三个参数都加上合理的默认值,这样即使KerasRegressor不传入对应参数,函数也能正常执行,网格搜索时会用param_grid里的候选值覆盖默认值:

def create_lstm_model(optimizer='adam', neurons=8, activation='relu'):
    model = Sequential()
    model.add(LSTM(units=neurons, input_shape=(X_train.shape[1], X_train.shape[2])))
    model.add(Dropout(0.2))
    model.add(Dense(1, activation=activation))
    model.compile(loss='mean_squared_error', optimizer=optimizer)
    return model

# 此时初始化KerasRegressor可以简化,不用再传neurons和activation的默认值
model = KerasRegressor(model=create_lstm_model, epochs=10, batch_size=16, verbose=0)

方案二:在KerasRegressor初始化时传入optimizer的默认值

如果你不想修改模型函数,那就在初始化KerasRegressor的时候,给optimizer指定一个默认实例,这样网格搜索会用param_grid里的候选值替换这个默认值:

model = KerasRegressor(model=create_lstm_model, neurons=8, activation='relu', optimizer=Adam(), epochs=10, batch_size=16, verbose=0)

另外还要提醒你一个小细节:你的GridSearchCV代码里,scoring参数写的是"neg_mean_squared_error",这是HTML转义后的双引号,要改成正常的双引号"neg_mean_squared_error",不然可能会导致参数解析错误。

你提供的错误信息供参考:

The above exception was the direct cause of the following exception:
TypeError Tracebac...

备注:内容来源于stack exchange,提问作者user25508381

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 11:09:38