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

使用Keras Tuner调参回归ANN时出现KeyError: 'val_mean_absolute_error'

Keras Tuner超参数调优触发KeyError: 'val_mean_absolute_error'的原因及解决

问题重现

尝试用Keras Tuner对回归人工神经网络(ANN)做超参数调优时,执行超参数搜索收到错误:KeyError: 'val_mean_absolute_error'

代码

def build_model(hp):
    model = keras.Sequential()
    for i in range(hp.Int('num_layers', 2, 20)):
        model.add(layers.Dense(
            units=hp.Int('units_' + str(i), min_value=32, max_value=512, step=32),
            activation='relu'
        ))
        if hp.Boolean("dropout"):
            model.add(layers.Dropout(rate=0.5))
    model.add(layers.Dense(1, activation='linear'))
    model.compile(
        optimizer=keras.optimizers.Adam(hp.Choice('learning_rate', [1e-4, 1e-3, 1e-5])),
        loss='mean_absolute_error',
        metrics=['mean_absolute_error']
    )
    return model

tuner = kt.RandomSearch(
    build_model,
    objective='val_mean_absolute_error',
    max_trials=5,
    executions_per_trial=2,
    overwrite=True,
    directory="Local Files",
    project_name="Keras")

tuner.search(x_train, y_train, epochs=1)

报错回溯

Traceback (most recent call last):
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\base_tuner.py", line 266, in _try_run_and_update_trial
    self._run_and_update_trial(trial, *fit_args, **fit_kwargs)
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\base_tuner.py", line 257, in _run_and_update_trial
    tuner_utils.convert_to_metrics_dict(
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 270, in convert_to_metrics_dict
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 270, in <listcomp>
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 283, in convert_to_metrics_dict
    best_value, _ = _get_best_value_and_best_epoch_from_history(
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\tuner_utils.py", line 254, in _get_best_value_and_best_epoch_from_history
    objective_value = objective.get_value(metrics)
  File "c:\Users\{user}\.venv\lib\site-packages\keras_tuner\engine\objective.py", line 57, in get_value
    return logs[self.name]
KeyError: 'val_mean_absolute_error'

原因分析

你指定的优化目标是val_mean_absolute_error(验证集平均绝对误差),但调用tuner.search()时既没有传入单独的验证集数据,也没有设置validation_split参数划分训练集的一部分作为验证集。Keras Tuner无法计算验证集指标,因此找不到val_mean_absolute_error这个键,触发KeyError。

解决方法

方法1:提供验证集数据

在tuner.search()中添加验证集相关参数,两种方式任选其一:

  • 用validation_split从训练集中划分比例作为验证集:
tuner.search(x_train, y_train, epochs=1, validation_split=0.2)  # 划分20%训练数据为验证集
  • 传入提前准备好的验证集:
tuner.search(x_train, y_train, epochs=1, validation_data=(x_val, y_val))

方法2:修改优化目标为训练集指标

如果不需要验证集评估,直接把目标改为训练集的mean_absolute_error:

tuner = kt.RandomSearch(
    build_model,
    objective='mean_absolute_error',  # 替换为训练集指标
    max_trials=5,
    executions_per_trial=2,
    overwrite=True,
    directory="Local Files",
    project_name="Keras")

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:27:14