python - 使用 Keras 调整超参数会根据使用的方法返回不同的结果
问题描述
我正在使用 Keras Tuner 工具调整我的模型超参数,如下所示:
tuner.search(
x=preprocessed_train_df,
y=preprocessed_train_df,
validation_split=0.1,
epochs=10,
callbacks=[es],
)
我使用以下两种方法测试了调谐器结果,理论上应该返回相同的结果:
方法一:
best_hps = tuner.get_best_hyperparameters(num_trials=1)[0]
best_model1 = tuner.hypermodel.build(best_hps)
方法二:
best_model2 = tuner.get_best_models(num_models=1)[0]
当我运行 best_model1.summary() 或 best_model2.summary() 时,我得到相同的汇总结果,但如果我适合模型或按如下方式评估它:
loss, loss2, accuracy = best_model1.evaluate(preprocessed_train_df, preprocessed_train_df)
loss_, loss2_, accuracy_ = best_model2.evaluate(preprocessed_train_df, preprocessed_train_df)
我得到不同的损失结果,这表明 best_model1 和 best_model2 在某种程度上是不同的。
解决方案
好像方法
BaseTuner.get_best_models(num_models=1)
返回已经使用 Tuner.search 中定义的 epoch 数训练的模型。
虽然方法
best_hp = tuner.get_best_hyperparameters()[0]
model = tuner.hypermodel.build(best_hp)
从 0 开始训练模型。第二种方法是 Keras 推荐的方法。继承源。