Построить несколько графиков на одном графике с помощью Tensorboard
Я использую Keras с бэкэндом Tensorflow. Моя работа заключается в сравнении характеристик нескольких моделей, таких как Inception, VGG, Resnet и т. Д. В моем наборе данных. Я хотел бы представить точность обучения нескольких моделей на одном графике. Я пытаюсь сделать это в Tensorboard, но это не работает.
Есть ли способ построения нескольких графиков на одном графике с помощью Tensorboard или есть другой способ, которым я могу это сделать?
Спасибо
4 ответа
Если вы используете 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)
И это будет выглядеть так:
Будьте осторожны, что add_scalars
будет мешать организации ваших пробегов: он добавит несколько записей в этот список (и, таким образом, создаст путаницу):
Я бы порекомендовал вместо этого просто сделать:
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)
Вот способ сгруппировать несколько графиков на одном графике в один прогон , используя add_custom_scalar в PyTorch.
Что я получаю:
Соответствующий полный рабочий код:
from torch.utils.tensorboard import SummaryWriter
import math
layout = {
"ABCDE": {
"loss": ["Multiline", ["loss/train", "loss/validation"]],
"accuracy": ["Multiline", ["accuracy/train", "accuracy/validation"]],
},
}
writer = SummaryWriter()
writer.add_custom_scalars(layout)
epochs = 10
batch_size = 50
for epoch in range(epochs):
for index in range(batch_size):
global_batch_index = epoch * batch_size + index
train_loss = math.exp(-0.01 * global_batch_index)
train_accuracy = 1 - math.exp(-0.01 * global_batch_index)
writer.add_scalar("loss/train", train_loss, global_batch_index)
writer.add_scalar("accuracy/train", train_accuracy, global_batch_index)
validation_loss = train_loss + 0.1
validation_accuracy = train_accuracy - 0.1
writer.add_scalar("loss/validation", validation_loss, global_batch_index)
writer.add_scalar("accuracy/validation", validation_accuracy, global_batch_index)
writer.close()
Обратите внимание, что используемая вкладка в левом верхнем углу окна не
SCALARS
но
CUSTOM SCALARS
- Вы можете определенно построить скаляры, такие как потеря и точность проверки:
tf.summary.scalar("loss", cost)
где стоимость - это тензор `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 с разными путями журнала.
- Проверьте изображение ниже:
- Я не знаю, можете ли вы изобразить разную точность разных моделей на одном графике... Но вы можете написать программу, которая это делает
- Может быть, вы можете записать сводную информацию о разных моделях в разные каталоги, а затем указать тензорную доску в родительский каталог, чтобы отобразить точность разных моделей на одном графике, как это предлагается в комментарии @RobertLugg
==================== ОБНОВЛЕНО =================
Я попытался сохранить точность и потерю разных моделей в разных каталогах, а затем настроить тензорную таблицу, чтобы она указывала на родительский каталог, и это работает, вы получите результаты разных моделей на одном графике. Я попробовал это сам, и это работает.
Просто сохраните каждый прогон в разных папках в основной папке и откройте тензорную доску в главной папке.
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