首页 > 解决方案 > 使用 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 在某种程度上是不同的。

标签: pythonkeras

解决方案


好像方法

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 推荐的方法。继承源。


推荐阅读