Keras Tuner多输出神经网络出现KeyError: 'mae'问题求助
解决Keras Tuner多输出模型超参数调优的KeyError问题
问题根源
多输出模型中,Keras会为每个输出的指标自动添加输出层名称后缀,比如输出层名为out1时,对应的mae指标会被命名为out1_mae,直接指定objective="mae"会因找不到对应键而触发KeyError。
解决方案
显式指定输出层名称
在定义输出层时添加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])修改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 )
- 若优化单个输出的mae:直接指定带后缀的指标名
明确编译时的指标映射
编译模型时,为每个输出单独指定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'] } )验证指标名称
编译模型后,打印指标名称列表确认目标名称是否正确:print(model.metrics_names) # 示例输出:['loss', 'output1_loss', 'output2_loss', 'output1_mae', 'output1_mse', 'output1_mape', 'output2_mae', 'output2_mse', 'output2_mape']
内容的提问来源于stack exchange,提问作者Governor
相关产品推荐
相关产品推荐

