Keras BayesianOptimization 调优器在调优过程中使“最佳 val_loss”变得更糟

问题描述

我正在使用 Keras 调谐器 Bayesianoptimization 调整模型。调整目标是 val_loss,它是在每个 epoch 之后计算的。据我了解,调谐器将通过各种超参数配置并训练模型,同时跟踪 val_loss。它保存模型在具有最低(最佳)val_loss 的时期的模型权重。调优后,调优器方法 get_best_models 会返回在训练过程中的任何时候都具有最佳 val_loss 的模型。

但是,在查看调整日志时,我注意到最终假定的最佳 val_loss 实际上并不是它在调整期间报告的最低 val_loss。在日志中,您可以看到“迄今为止最好的”val_loss 如何在第 64 次试验后增加到 0.431,而 val_loss 则差得多。

以下是日志的摘录:(我在使用 ... 进行训练时省略了日志行)

Search: Running Trial #62

Hyperparameter    |Value             |Best Value So Far 
lstm_reg          |0.01              |0                 
lstm_units        |384               |416               
learning_rate     |0.01741           |0.00062759        

Epoch 1/200
58/58 - 8s - loss: 5.8378 - mean_absolute_error: 0.8131 - val_loss: 2.1253 - val_mean_absolute_error: 0.6561
...
Epoch 26/200
58/58 - 5s - loss: 0.4074 - mean_absolute_error: 0.4579 - val_loss: 0.8352 - val_mean_absolute_error: 0.5948
Trial 62 Complete [00h 02m 37s]
val_loss: 0.5230200886726379

Best val_loss So Far: 0.396116703748703
Total elapsed time: 04h 32m 29s

Search: Running Trial #63

Hyperparameter    |Value             |Best Value So Far 
lstm_reg          |0.001             |0                 
lstm_units        |288               |416               
learning_rate     |0.00073415        |0.00062759        

Epoch 1/200
58/58 - 5s - loss: 0.8142 - mean_absolute_error: 0.6041 - val_loss: 0.8935 - val_mean_absolute_error: 0.5796
...
Epoch 45/200
58/58 - 5s - loss: 0.1761 - mean_absolute_error: 0.2561 - val_loss: 0.8256 - val_mean_absolute_error: 0.6804
Trial 63 Complete [00h 04m 04s]
val_loss: 0.527589738368988

Best val_loss So Far: 0.396116703748703
Total elapsed time: 04h 36m 34s

Search: Running Trial #64

Hyperparameter    |Value             |Best Value So Far 
lstm_reg          |0.01              |0                 
lstm_units        |384               |416               
learning_rate     |0.00011261        |0.00062759        

Epoch 1/200
58/58 - 6s - loss: 4.1151 - mean_absolute_error: 0.6866 - val_loss: 3.3185 - val_mean_absolute_error: 0.4880
...
Epoch 94/200
58/58 - 6s - loss: 0.3712 - mean_absolute_error: 0.3964 - val_loss: 0.7933 - val_mean_absolute_error: 0.5781
Trial 64 Complete [00h 09m 06s]
val_loss: 0.6574578285217285

Best val_loss So Far: 0.43126755952835083
Total elapsed time: 04h 45m 40s

Search: Running Trial #65

Hyperparameter    |Value             |Best Value So Far 
lstm_reg          |0.0001            |0                 
lstm_units        |480               |256               
learning_rate     |0.010597          |0.05              

Epoch 1/200
58/58 - 6s - loss: 1.1511 - mean_absolute_error: 0.7090 - val_loss: 1.1972 - val_mean_absolute_error: 0.6724
...

调整摘要指出最佳 val_loss 为 0.400,即使它必须在某个时间点找到一个模型,val_loss 为 0.396,这实际上更好。 (准确地说是试炼58)

Best val_loss So Far: 0.4001617431640625
Total elapsed time: 15h 06m 02s
Hyperparameter search complete. Optimal parameters: ...

这是创建调谐器的代码

tuner = kt.Bayesianoptimization(
        Feedback_model_builder,objective="val_loss",directory="./model_tuning",project_name=name,max_trials=200
    )

并开始调整过程:

tuner.search(
        multi_window.train,validation_data=multi_window.val,callbacks=[early_stopping],verbose=tf_verbosity,epochs=200,)

为什么“最佳”模型没有遇到的最低val_loss?是我误解了调谐器的工作原理还是这是一个错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)