Разбиение графиков на одном графике с использованием Tensorboard

Я использую Keras с бэкэндом Tensorflow. Моя работа включает в себя сравнение характеристик нескольких моделей, таких как Inception, VGG, Resnet и т.д. В моем наборе данных. Я хотел бы построить точность обучения нескольких моделей на одном графике. Я пытаюсь сделать это в Tensorboard, но он не работает.

Есть ли способ построения нескольких графиков в одном графике с использованием Tensorboard или есть ли другой способ, которым я могу это сделать?

Спасибо

Ответ 1

  • Вы можете определенно построить скаляры, такие как потеря и точность проверки: tf.summary.scalar("loss", cost) где стоимость - это тензор 'стоимость = tf.reduce_mean (-tf.reduce_sum (y * tf.log(pred) "), extension_indices = 1))
  • Теперь вы пишете сводку для построения всех значений, а затем можете объединить все эти сводки в одну сводку: merged_summary_op = tf.summary.merge_all()
  • Следующим шагом будет запуск этой сводки в сеансе с помощью summary = sess.run(merged_summary_op)
  • После того, как вы запустите merged_summary_op вы должны написать резюме, используя summary_writer: summary_writer.add_summary(summary, epoch_number) где summary_writer = tf.summary.FileWriter(logs_path, graph=tf.get_default_graph())
  • Теперь откройте терминал или cmd и выполните следующую команду: "Запустите команду tensorboard --logdir="logpath"
  • Затем откройте http://0.0.0.0:6006/ в своем веб-браузере
  • Вы можете обратиться по следующей ссылке: https://github.com/jayshah19949596/Tensorboard-Visualization-Freezing-Graph
  • Другие вещи, которые вы можете построить, это вес, входные данные
  • Вы также можете отобразить изображения на тензорной доске
  • Я думаю, что если вы используете керас с tenorflow 1.5, то использовать тензорную доску легко, потому что в тензорный поток 1.5 кера включен в качестве их официального API высокого уровня
  • Я уверен, что вы можете построить разную точность на одном графике для одной и той же модели с разными гиперпараметрами, используя разные экземпляры FileWriter с разными путями журнала.
  • Проверьте изображение ниже: enter image description here
  • Я не знаю, можете ли вы изобразить разную точность разных моделей на одном графике... Но вы можете написать программу, которая это делает
  • Может быть, вы можете записать сводную информацию о разных моделях в разные каталоги, а затем указать тензорную доску в родительский каталог, чтобы отобразить точность разных моделей на одном графике, как это предлагается в комментарии @RobertLugg

==================== ОБНОВЛЕНО =================

Я попытался сохранить точность и потерю разных моделей в разных каталогах, а затем сделать тензорную таблицу, чтобы она указывала на родительский каталог, и это работает, вы получите результаты разных моделей на одном графике. Я попробовал это сам, и это работает.

Ответ 2

Просто сохраните каждый прогон в разных папках в основной папке и откройте тензорную доску в главной папке.

for i in range(x):
    tensorboard = TensorBoard(log_dir='./logs/' + 'run' + str(i), histogram_freq=0,
                                     write_graph=True, write_images=False)

    model.fit(X, Y, epochs=150, batch_size=10, callbacks=[tensorboard])

Из терминала запустите тензорную доску так:

tensorboard --logdir=logs

Ответ 3

Если вы используете SummaryWriter из tenorboardX или pytorch 1.2, у вас есть метод с именем add_scalars:

Назовите это так:

my_summary_writer.add_scalars(f'loss/check_info', {
    'score': score[iteration],
    'score_nf': score_nf[iteration],
}, iteration)

И это будет выглядеть так:

tensorboard image


Будьте осторожны, чтобы add_scalars испортил организацию ваших запусков: он добавит в этот список несколько записей (и, таким образом, создаст путаницу):

tensorboard image

Я бы порекомендовал вместо этого просто:

my_summary_writer.add_scalar(f'check_info/score',    score[iter],    iter)
my_summary_writer.add_scalar(f'check_info/score_nf', score_nf[iter], iter)

Ответ 4

Вот пример, создающий два tf.summary.FileWriter которые совместно используют тот же корневой каталог. Создание tf.summary.scalar совместно используемого двумя tf.summary.FileWriter. На каждом шаге по времени получайте summary и обновляйте каждый tf.summary.FileWriter.

import os

import tqdm
import tensorflow as tf


def tb_test():
    sess = tf.Session()

    x = tf.placeholder(dtype=tf.float32)
    summary = tf.summary.scalar('Values', x)
    merged = tf.summary.merge_all()

    sess.run(tf.global_variables_initializer())

    writer_1 = tf.summary.FileWriter(os.path.join('tb_summary', 'train'))
    writer_2 = tf.summary.FileWriter(os.path.join('tb_summary', 'eval'))

    for i in tqdm.tqdm(range(200)):
        # train
        summary_1 = sess.run(merged, feed_dict={x: i-10})
        writer_1.add_summary(summary_1, i)
        # eval
        summary_2 = sess.run(merged, feed_dict={x: i+10})            
        writer_2.add_summary(summary_2, i)

    writer_1.close()
    writer_2.close()


if __name__ == '__main__':
    tb_test()

Вот результат:

enter image description here

Оранжевая линия показывает результат этапа оценки, и, соответственно, зеленая линия иллюстрирует данные этапа обучения.