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

Keras LSTM模型Hyperband调参报错:KeyError 'val_mean_squared_error'

解决Keras Tuner Hyperband的KeyError: 'val_mean_squared_error'问题

问题重现

模型构建代码

def model_builder(hp):
  model = Sequential()
 
  hp_units = hp.Int('units', min_value=32, max_value=512, step=32)

  model.add(LSTM(units=hp_units, input_shape=(trainX.shape[1], trainX.shape[2])))
  model.add(Dropout(0.2))
  model.add(Dense(1))

  hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])

  model.compile(loss='mean_squared_error', optimizer='adam')

  return model

调参器设置

tuner = kt.Hyperband(model_builder,
                     objective='val_mean_squared_error',
                     max_epochs=10,
                     factor=3)

运行代码

tuner.search(X_train, y_train, epochs=50, validation_split=0.2, callbacks=[stop_early])

错误信息

Search: Running Trial #3

Value             |Best Value So Far |Hyperparameter
64                |352               |units
0.0001            |0.01              |learning_rate
2                 |2                 |tuner/epochs
0                 |0                 |tuner/initial_epoch
2                 |2                 |tuner/bracket
0                 |0                 |tuner/round

Epoch 1/2
104/104 ━━━━━━━━━━━━━━━━━━━━ 6s 29ms/step - loss: 0.0641 - val_loss: 0.0042
Epoch 2/2
104/104 ━━━━━━━━━━━━━━━━━━━━ 2s 24ms/step - loss: 0.0074 - val_loss: 0.0043
Traceback (most recent call last):
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/base_tuner.py", line 274, in _try_run_and_update_trial
    self._run_and_update_trial(trial, *fit_args, **fit_kwargs)
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/base_tuner.py", line 265, in _run_and_update_trial
    tuner_utils.convert_to_metrics_dict(
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/tuner_utils.py", line 132, in convert_to_metrics_dict
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/tuner_utils.py", line 132, in <listcomp>
    [convert_to_metrics_dict(elem, objective) for elem in results]
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/tuner_utils.py", line 145, in convert_to_metrics_dict
    best_value, _ = _get_best_value_and_best_epoch_from_history(
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/tuner_utils.py", line 116, in _get_best_value_and_best_epoch_from_history
    objective_value = objective.get_value(metrics)
  File "/home/tillys/python/usr/local/lib/python3.10/site-packages/keras_tuner/src/engine/objective.py", line 59, in get_value
    return logs[self.name]
KeyError: 'val_mean_squared_error'

错误原因

当模型仅指定loss='mean_squared_error'而未显式声明metrics时,Keras训练日志中只会生成loss和val_loss字段,不会出现mean_squared_error和val_mean_squared_error。但调参器的objective设置为val_mean_squared_error,导致Keras Tuner无法在日志中找到对应字段,抛出KeyError。

另外,代码存在隐性问题:定义了hp_learning_rate但未传递给Adam优化器,导致学习率调参完全未生效。

修复方案

方案一:显式添加metrics,匹配调参器objective

修改model_builder中的编译代码,添加metrics=['mean_squared_error'],同时将学习率参数传入Adam优化器:

from tensorflow.keras.optimizers import Adam

def model_builder(hp):
  model = Sequential()
 
  hp_units = hp.Int('units', min_value=32, max_value=512, step=32)

  model.add(LSTM(units=hp_units, input_shape=(trainX.shape[1], trainX.shape[2])))
  model.add(Dropout(0.2))
  model.add(Dense(1))

  hp_learning_rate = hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])

  model.compile(
      loss='mean_squared_error',
      optimizer=Adam(learning_rate=hp_learning_rate),
      metrics=['mean_squared_error']
  )

  return model

训练日志会生成val_mean_squared_error字段,与调参器的objective匹配。

方案二:修改调参器objective为val_loss

模型的loss本身就是均方误差,val_loss的值和val_mean_squared_error完全一致,直接修改调参器的objective即可(仍建议修复学习率传递问题):

tuner = kt.Hyperband(model_builder,
                     objective='val_loss',
                     max_epochs=10,
                     factor=3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:05:21