如何将Keras-Tuner的调参结果保存为Pandas DataFrame?
将Keras-Tuner调参结果转为Pandas DataFrame的方法
当然可以直接获取调参结果并转为DataFrame,不用依赖results_summary()的打印内容,也不用遍历保存文件。以下是具体实现:
核心思路
Keras-Tuner的优化器对象(比如你用的BayesianOptimization)内置了可直接调用的属性和方法,optimizer.trials能获取所有试验的完整数据,我们可以从中提取超参数、指标分数等信息,直接构造DataFrame。
完整实现代码
import pandas as pd # 完成搜索后,遍历所有试验提取数据 trials_data = [] for trial in optimizer.trials: # 提取超参键值对 hyperparams = trial.hyperparameters.values # 提取试验的目标指标值(比如你设置的val_loss) score = trial.score # 提取试验状态(是否成功完成) status = trial.status # 组合成字典 trial_dict = {"score": score, "status": status} trial_dict.update(hyperparams) trials_data.append(trial_dict) # 转为Pandas DataFrame results_df = pd.DataFrame(trials_data) # 按目标指标排序(如果是val_loss则升序,val_accuracy则改为ascending=False) results_df = results_df.sort_values(by="score", ascending=True) # 查看结果 print(results_df)
仅提取最优N个试验的方法
如果只需要像results_summary()那样展示最优的几个结果,可以用get_best_hyperparameters()筛选后再构造DataFrame:
best_hps = optimizer.get_best_hyperparameters(num_trials=5) best_data = [] for hp in best_hps: # 通过trial_id匹配对应试验的分数 trial = optimizer.trials[hp.trial_id] best_data.append({**hp.values, "score": trial.score}) best_df = pd.DataFrame(best_data)
补充说明
你之前遇到的results_summary()返回None是因为这个方法仅负责打印内容,不返回数据;optimizer.search()也不会返回结果,所有调参数据都存在优化器实例本身中,直接从实例提取即可。
内容的提问来源于stack exchange,提问作者Enes
相关产品推荐
相关产品推荐

