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

使用Grid Search调CNN超参数时遇TargetReshaper.transform()参数错误

问题解决:GridSearchCV与KerasClassifier的参数错误

核心问题

你代码里的关键错误是**KerasClassifier的build_fn参数传错了**:你传入的是create_model()(函数执行后的模型实例),但它需要的是函数本身(不带括号的create_model)。

修正后的代码

把这一行:

model = KerasClassifier(build_fn = create_model(), verbose = 1)

改成:

model = KerasClassifier(build_fn=create_model, verbose=1)

错误原因解释

KerasClassifier的设计逻辑是:每次交叉验证迭代时,调用build_fn来创建全新的模型实例,避免不同折之间的模型参数互相干扰。当你传入create_model()时,相当于直接把一个已编译好的模型实例塞给了它,打乱了内部的模型构建流程,进而触发了TargetReshaper.transform()的参数错误——内部逻辑原本期望通过调用函数生成模型,参数传递路径因此混乱,才会出现“仅接受1个参数却传入2个”的报错。

扩展:调整更多模型超参数

如果后续需要用GridSearch调整模型本身的超参数(比如卷积核数量、优化器类型),可以给create_model添加参数,然后在param_grid中加入对应项,示例如下:

def create_model(filters=32, optimizer='adam'):
    model = Sequential()
    model.add(layers.Conv2D(filters, (3, 3), activation='relu', input_shape=(178, 268, 1)))
    # ... 其余模型层定义
    model.compile(loss='binary_crossentropy', 
                  optimizer=optimizer,
                  metrics=['acc'])
    return model

model = KerasClassifier(build_fn=create_model, verbose=1)
param_grid = dict(
    batch_size=[40, 60, 80, 100],
    epochs=[10, 20, 30],
    filters=[32, 64],
    optimizer=['adam', 'rmsprop']
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:49