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

Keras Tuner多输出神经网络出现KeyError: 'mae'问题求助

解决Keras Tuner多输出模型超参数调优的KeyError问题

问题根源

多输出模型中,Keras会为每个输出的指标自动添加输出层名称后缀,比如输出层名为out1时,对应的mae指标会被命名为out1_mae,直接指定objective="mae"会因找不到对应键而触发KeyError。

解决方案

  1. 显式指定输出层名称
    在定义输出层时添加name参数,方便后续明确指标名称:

    out1 = tf.keras.layers.Dense(..., name='output1')(x)
    out2 = tf.keras.layers.Dense(..., name='output2')(x)
    model = tf.keras.models.Model(inputs=inputs, outputs=[out1, out2])
    
  2. 修改Keras Tuner的目标参数

    • 若优化单个输出的mae:直接指定带后缀的指标名
      tuner = keras_tuner.BayesianOptimization(
          hypermodel=wrapped_model,
          objective="output1_mae",  # 对应output1输出的mae
          max_trials=max_trials,
          overwrite=True,
          hyperparameters=hyperparameters
      )
      
    • 若需多目标优化:传入目标列表
      tuner = keras_tuner.BayesianOptimization(
          hypermodel=wrapped_model,
          objective=[
              keras_tuner.Objective("output1_mae", direction="min"),
              keras_tuner.Objective("output2_mae", direction="min")
          ],
          max_trials=max_trials,
          overwrite=True,
          hyperparameters=hyperparameters
      )
      
  3. 明确编译时的指标映射
    编译模型时,为每个输出单独指定metrics,让指标命名更清晰:

    optimizer = tf.keras.optimizers.Adam(
        learning_rate=hp_lr,
        beta_1=0.9,
        beta_2=0.999,
        epsilon=1e-07,
        decay=0
    )
    
    model.compile(
        loss='mae',
        optimizer=optimizer,
        metrics={
            'output1': ['mae', 'mse', 'mape'],
            'output2': ['mae', 'mse', 'mape']
        }
    )
    
  4. 验证指标名称
    编译模型后,打印指标名称列表确认目标名称是否正确:

    print(model.metrics_names)
    # 示例输出:['loss', 'output1_loss', 'output2_loss', 'output1_mae', 'output1_mse', 'output1_mape', 'output2_mae', 'output2_mse', 'output2_mape']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:21