Keras Tuner中Hyperband的max_epochs与search的epochs区别解析
我在代码中使用如下实现:
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

