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

Keras Tuner中Hyperband的max_epochs与search的epochs区别解析

关于Keras Tuner Hyperband参数的疑问

我在代码中使用如下实现:

stop_early = tf.keras.callbacks.EarlyStopping(monitor='loss', patience=3)

tuner = kt.Hyperband(
 model_builder,
 objective='val_loss',
 max_epochs=100, 
 factor=2, 
 overwrite=True,
 directory=dir,
 project_name='x',
 hyperband_iterations=2 
                    ) 

tuner.search(X_train,Y_train, validation_data=(X_val,Y_val), callbacks=[stop_early],verbose=0)

但我无法理解Hyperband构造函数中的max_epochs参数与search方法中的epochs参数的区别。我当前理解max_epochs是调参期间每个模型训练的最大轮数,factor设为2意味着每次将训练轮数翻倍后淘汰一半模型,但不清楚初始训练轮数是多少,是否为随机值?此外,search方法中的epochs参数具体作用是什么?望解答。


参数解析与问题解答

1. Hyperband构造函数的max_epochs

这个参数是Hyperband调优流程里,单个模型能训练的最大轮数上限,它决定了算法阶梯式训练的顶端轮数值。

关于初始训练轮数:它不是随机值,Hyperband会基于max_epochs和factor通过公式计算得出,公式为:
initial_epochs = max_epochs / (factor^floor(log(max_epochs, factor)))
以你代码里的max_epochs=100、factor=2为例,计算后初始训练轮数为13,这是Hyperband算法的标准计算逻辑。

你对factor的理解是正确的:算法会先让所有候选模型训练初始轮数,淘汰一半表现较差的模型;剩下的模型将训练轮数翻倍(乘以factor),再淘汰一半,重复这个过程,直到剩余模型训练到max_epochs指定的轮数。

2. search方法的epochs参数

这个参数的作用是强制覆盖Hyperband自动计算的训练轮数。如果在search中指定了epochs,所有候选模型都会被固定训练该轮数,Hyperband原本的阶梯式淘汰逻辑会被完全忽略,变成用统一轮数评估所有模型性能。

通常不建议手动指定该参数,让Hyperband基于max_epochs和factor自动控制训练轮数,能更高效地利用计算资源——快速淘汰差模型,把更多资源倾斜给潜力模型。


内容的提问来源于stack exchange,提问作者Robbe Van Renne

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:09