Keras Tuner调用get_best_hyperparameters与get_best_models返回空列表求助
Keras Tuner调优后无法获取最优模型/超参数的解决办法
以下是针对问题的排查和解决步骤:
验证目标指标与训练配置匹配
确保初始化Tuner时的objective参数,和模型编译时指定的metrics、以及tuner.search()传入的验证数据逻辑一致:- 若objective设为
val_accuracy,必须在tuner.search()中传入验证集(validation_data或validation_split),否则无验证指标可用于筛选最优结果; - 模型编译时要包含对应指标,比如
model.compile(metrics=['accuracy']),确保训练过程中会输出该指标数据。
示例正确初始化代码:
tuner = RandomSearch( build_model, objective='val_accuracy', max_trials=10, directory='tuner_logs', project_name='my_tuning' ) # 搜索时必须传入验证数据 tuner.search(x_train, y_train, epochs=20, validation_split=0.2)- 若objective设为
检查搜索结果的存储与权限
查看Tuner指定的directory和project_name路径下,是否生成了keras_tuner相关的日志文件(如JSON、CSV)。如果没有,可能是程序无该目录的读写权限,需调整目录权限或更换存储路径。*修正get_best_方法的调用参数
调用get_best_hyperparameters时需指定num_trials参数(版本不同默认值可能有差异),比如:best_hps = tuner.get_best_hyperparameters(num_trials=1)而
get_best_models需确保搜索过程中模型被正确保存,若使用带早停的调优器(如Hyperband),初始化时需确认save_best_model=True(默认开启)。重新加载Tuner实例
若在同一脚本中搜索后直接调用方法出现异常,可尝试重新初始化Tuner并加载已有结果:tuner = RandomSearch( build_model, objective='val_accuracy', max_trials=10, directory='tuner_logs', project_name='my_tuning' ) tuner.reload() # 加载已完成的搜索记录 best_hps = tuner.get_best_hyperparameters(num_trials=1) best_model = tuner.get_best_models(num_models=1)排查回调函数的冲突
若训练时使用了EarlyStopping回调,需确保其monitor参数与Tuner的objective一致,比如:from tensorflow.keras.callbacks import EarlyStopping stop_early = EarlyStopping(monitor='val_accuracy', patience=5) tuner.search(x_train, y_train, epochs=20, validation_split=0.2, callbacks=[stop_early])避免因早停监控的指标不匹配,导致最优模型未被记录。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

