TensorBoard HParams 未显示超参数调整的准确性指标

问题描述 投票:0回答:1

我正在 TensorFlow 中进行超参数调整,并使用 TensorBoard 中的 HParams 插件设置了一个实验来记录不同的配置。我的模型正在使用 dropout 和学习率的变化进行训练,并且我正在记录这些参数以及模型的准确性。但是,当我打开 TensorBoard 并导航到 HParams 仪表板时,不会显示与每个试验相关的准确性指标。该表正确显示了超参数,但“准确性”列为空,即使我的代码使用“准确性”作为指标来编译模型并使用 hp.KerasCallback 进行日志记录。我已经验证模型训练是否正确,并且标量仪表板等其他 TensorBoard 功能显示了各个时期的准确性趋势。我正在寻求帮助来理解为什么 HParams 表中没有显示准确性以及如何解决此问题。

我使用 TensorBoard 的 HParams 进行超参数调整的代码:

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

    # Define hyperparameters
    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]))

    # Set up logging
    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')]
        )

    # Training function
    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)

        model.fit(
            x_train_reshaped, y_train_,
            epochs=3,
            validation_data=(x_val_reshaped, y_val),
            callbacks=[hparams_callback, tensorboard_callback]
        )

    # Run the training for each set of hyperparameters
    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
tensorflow machine-learning tensorboard hyperparameters
1个回答
0
投票

我按照此处评论所附链接中的示例进行操作:https://stackoverflow.com/a/66595678

对我来说最重要的是在我的指标名称之前添加“epoch_”,我认为这是因为这模仿了它们通常在张量板中的表示方式:

metrics=[hp.Metric('epoch_accuracy', display_name='Accuracy')]

© www.soinside.com 2019 - 2024. All rights reserved.