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

如何控制Keras Tuner Hyperband的模型数量与训练轮次?

Keras Tuner Hyperband:模型数量与训练轮次控制指南

一、控制运行的模型数量

Hyperband没有max_trials和execution_per_trial这类直接参数,它靠算法逻辑动态筛选模型,你可以通过以下方式间接控制总模型数:

  • max_epochs + factor:Hyperband的核心逻辑是多轮淘汰:先批量训练模型,每轮淘汰factor比例的低性能模型,留下的模型继续训练更久。max_epochs是最终存活模型的最大训练轮次,factor是每轮淘汰比例(默认3)。总模型数大致由max_epochs * log_factor(max_epochs)决定,调小这两个参数能减少总模型数量。
  • hyperband_iterations:指定Hyperband算法重复运行的次数(默认1)。减少这个值可以直接降低总模型数,比如设为0.5只会运行半轮筛选逻辑。
  • 模拟execution_per_trial:如果需要同一超参数组合多次训练取平均,可以在模型构建函数里手动循环训练,比如:
    def build_model(hp):
        model = Sequential(...)
        model.compile(...)
        # 同一超参数训练3次取平均
        val_accs = []
        for _ in range(3):
            history = model.fit(...)
            val_accs.append(history.history['val_accuracy'][-1])
        # 返回平均精度作为评估指标
        return np.mean(val_accs)
    

二、训练轮次的生效逻辑

Hyperband的max_epochs和tuner.search()的epochs是配合生效的:

  • max_epochs:定义最终存活到最后一轮的模型,能训练的最大轮次,是Hyperband淘汰流程的目标轮次。
  • search(epochs=X):是所有训练的绝对上限。如果Hyperband流程中某阶段需要训练的轮次超过X,实际只会训练X轮就停止;如果X≥max_epochs,Hyperband会正常走完淘汰流程,最终模型训练到max_epochs轮。

正确用法示例

比如你希望最优模型最多训练50轮,那么初始化时设max_epochs=50,search()里的epochs设为不小于50的值(比如60),让Hyperband的淘汰逻辑主导训练时长:

tuner = Hyperband(
    build_model,
    objective='val_accuracy',
    max_epochs=50,
    factor=3,
    directory='tuner_dir',
    project_name='hyperband_demo'
)

# epochs设为比max_epochs大的值,保证Hyperband流程不被截断
tuner.search(x_train, y_train, epochs=60, validation_data=(x_val, y_val))

如果search(epochs=30)且max_epochs=50,那么所有模型的训练轮次都不会超过30,Hyperband的淘汰流程会被提前截断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:18:26