Разбиение графиков на одном графике с использованием 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]()
Оранжевая линия показывает результат этапа оценки, и, соответственно, зеленая линия иллюстрирует данные этапа обучения.