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

如何向Keras Tuner调优模型传入num_features、num_classes等自定义参数

错误原因

  1. 你的_model函数参数顺序为(hp, num_features, num_classes),直接调用_model(FEATURES_COUNT, CLASS_COUNT)时,FEATURES_COUNT被分配给了第一个参数hp,CLASS_COUNT被分配给了第二个参数num_features,自然缺少第三个参数num_classes,触发参数缺失报错。
  2. Keras Tuner的RandomSearch第一个参数要求传入仅接收hp作为唯一参数的可调用对象,不能直接传入函数执行后的返回值,也不能直接传入带额外参数的函数。hp是Tuner自动生成并注入的超参数管理对象,不需要你手动传入。

解决方法

步骤1:修正模型构建函数的小疏漏

InputLayer的input_shape参数要求传入元组,你当前少写了逗号,后续运行会触发形状报错,先修正:

# 原来的写法
model.add(tf.keras.layers.InputLayer(input_shape=(num_features)))
# 修正后
model.add(tf.keras.layers.InputLayer(input_shape=(num_features,)))

步骤2:用lambda包装模型构建函数

用lambda把固定参数FEATURES_COUNT、CLASS_COUNT提前传入,仅保留hp作为入参供Tuner自动调用,修正后的调用代码:

tuner = RandomSearch(
    lambda hp: _model(hp, FEATURES_COUNT, CLASS_COUNT),
    objective="categorical_accuracy",
    max_trials=10,
    overwrite=True,
    directory="my_project",
    project_name="my_project",
)

可选方案:用闭包封装

如果你不想用lambda,也可以用闭包把固定参数包裹起来,逻辑更清晰:

def build_model(num_features, num_classes):
    def _model(hp):
        model = keras.Sequential()
        model.add(tf.keras.layers.InputLayer(input_shape=(num_features,)))
        model.add(tf.keras.layers.Dense(
                hp.Int("dense_1_units", min_value=128, max_value=2048, step=128, default=128),
                activation="sigmoid"
            ))
        model.add(tf.keras.layers.Dense(
            hp.Int("dense_2_units", min_value=128, max_value=2048, step=128, default=128),
            activation="sigmoid"
        ))
        model.add(tf.keras.layers.Dense(num_classes, activation="softmax"))

        model.compile(
            optimizer=tf.keras.optimizers.Adam(
                hp.Choice("learning_rate", values=[1e-1, 1e-2, 1e-3])
            ),
            loss="categorical_crossentropy",
            metrics="categorical_accuracy"
        )
        return model
    return _model

# 调用方式
tuner = RandomSearch(
    build_model(FEATURES_COUNT, CLASS_COUNT),
    objective="categorical_accuracy",
    max_trials=10,
    overwrite=True,
    directory="my_project",
    project_name="my_project",
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:15:06