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

TensorBoard HParams面板未显示超参数调优的accuracy指标问题

问题排查:TensorBoard HParams面板Accuracy指标不显示

核心现象

使用TensorFlow HParams插件进行超参数调优时,HParams表格能正常展示dropout、learning rate等超参数,但Accuracy列完全为空;模型训练过程正常,TensorBoard的Scalars面板能清晰看到训练周期内的accuracy变化趋势。

原因定位

hp.KerasCallback仅负责记录超参数配置信息,不会自动将训练/验证阶段的最终accuracy指标写入HParams日志体系。必须手动在训练结束后,将指定指标的结果写入对应日志目录,同时要保证指标名称与hp.Metric中定义的完全匹配。

解决办法

修改训练函数,在model.fit执行完成后,手动读取训练历史或评估模型,将最终accuracy写入HParams日志:

修改后的完整代码

from tensorboard.plugins.hparams import api as hp
import tensorflow as tf
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout

# 定义超参数
HP_DROPOUT = hp.HParam('dropout', hp.Discrete([0.2, 0.3, 0.4]))
HP_LEARNING_RATE = hp.HParam('learning_rate', hp.Discrete([1e-2, 1e-3]))

# 初始化HParams日志配置
log_dir = './tensorboard/nn_1'
with tf.summary.create_file_writer(log_dir).as_default():
    hp.hparams_config(
        hparams=[HP_DROPOUT, HP_LEARNING_RATE],
        metrics=[hp.Metric('accuracy', display_name='Accuracy')]
    )

# 训练函数
def train_test_model(hparams, session_num):
    model_name = f"model_1_session_{session_num}"
    print(f"Training {model_name} with hyperparameters {hparams}...")
    model = tf.keras.Sequential([
        Conv2D(32, kernel_size=(3, 3), activation='elu'),
        Dropout(hparams[HP_DROPOUT]),
        Conv2D(32, kernel_size=(3, 3), activation='elu'),
        Dropout(hparams[HP_DROPOUT]),
        MaxPooling2D(pool_size=(2, 2)),
        Flatten(),
        Dense(10, activation='softmax')
    ])
    model.compile(
        loss='categorical_crossentropy',
        optimizer=tf.keras.optimizers.Adam(hparams[HP_LEARNING_RATE]),
        metrics=['accuracy']
    )

    tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=f'{log_dir}/{model_name}')
    hparams_callback = hp.KerasCallback(writer=f'{log_dir}/{model_name}', hparams=hparams)

    # 执行模型训练
    history = model.fit(
        x_train_reshaped, y_train_,
        epochs=3,
        validation_data=(x_val_reshaped, y_val),
        callbacks=[hparams_callback, tensorboard_callback]
    )

    # 关键步骤:手动记录最终accuracy到HParams日志
    with tf.summary.create_file_writer(f'{log_dir}/{model_name}').as_default():
        # 记录训练集最终accuracy(与hp.Metric定义的名称一致)
        tf.summary.scalar('accuracy', history.history['accuracy'][-1], step=session_num)
        # 如果需要记录验证集accuracy,需同步修改hp.Metric配置
        # tf.summary.scalar('val_accuracy', history.history['val_accuracy'][-1], step=session_num)

# 遍历所有超参数组合执行训练
session_num = 0
for dropout_rate in HP_DROPOUT.domain.values:
    for learning_rate in HP_LEARNING_RATE.domain.values:
        hparams = {
            HP_DROPOUT: dropout_rate,
            HP_LEARNING_RATE: learning_rate,
        }
        train_test_model(hparams, session_num)
        session_num += 1

额外注意事项

  • 指标名称一致性:如果要记录验证集accuracy,需在hp.hparams_config的metrics中添加hp.Metric('val_accuracy', display_name='Validation Accuracy'),同时在tf.summary.scalar中使用对应的键名val_accuracy。
  • 日志目录同步:手动写入日志的目录必须和hp.KerasCallback使用的目录完全一致,否则HParams无法关联超参数与指标结果。
  • 清理旧日志:修改代码后,删除旧的./tensorboard/nn_1目录再重新训练,避免旧日志数据干扰新结果的展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:55:28