0

我正在keras-tuner使用 Hyperband 来执行神经网络的超参数优化:

import keras_tuner as kt
tuner = kt.Hyperband(ann_model,
                     objective=Objective('val_loss', direction="min"),
                     max_epochs=100, factor=2, 
                     directory=/path/to/folder,
                     project_name="project_name", seed=0)
tuner.search(training_gen(), epochs=50, validation_data=valid_gen(),
             callbacks=[stop_early], steps_per_epoch=1000,
             validation_freq=1, validation_steps=100)

我将EarlyStopping回调定义为:

stop_early = tf.keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0.1,
                                          mode='min', patience=15)

通过设置max_epochs=100,我注意到(在 Hyperband 算法期间)特定模型的训练不是一次性执行的,而是通过步骤(“ Runnning trials”)执行的。

  1. 首先,模型从 epoch1到 epoch进行训练3
  2. 其次,从一个时代4到另一个时代7
  3. 然后,从813;
  4. 然后,从1425;
  5. 然后,从2650;
  6. 最后,从51100

因此,在每次“Running trial”结束时,Keras 都会保存训练状态,以便在下一次“Running trial”时继续该状态的训练。

通过设置patience=15

我注意到 EarlyStopping 回调在 "Running trial" 期间停止了训练5),特别是在 epoch 41(EarlyStopping 能够运行的第一个 epoch,因为:)start_epoch + patience = 26 + 15 = 41

然后,训练在 "Running trial" 中继续6),EarlyStopping 在 epoch 停止训练66(因此,在 epoch: start_epoch + patience = 51 + 15 = 66)。

因此:

  • 即使 EarlyStopping 在试跑过程中停止训练5),训练在试跑过程中继续6)
  • 耐心计数,在每次“运行试验”开始时自行重置(我认为它应该在 epoch 开始1并且永远不应该自行重置)。

使用 Keras Hyperband 进行调整时,耐心计数会在每次“运行试验”开始时自动重置,这是正常/预期的行为吗?

4

0 回答 0