You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
    
  • 检查搜索结果的存储与权限
    查看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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:45:34