使用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
相关产品推荐
相关产品推荐

