【问题标题】:Plot multiple graphs in one plot using Tensorboard使用 Tensorboard 在一张图中绘制多个图
【发布时间】:2018-08-03 16:53:21
【问题描述】:

我正在使用带有 Tensorflow 后端的 Keras。我的工作涉及在我的数据集上比较几种模型的性能,例如 Inception、VGG、Resnet 等。 我想在一张图中绘制几个模型的训练精度。我正在尝试在 Tensorboard 中执行此操作,但它不起作用。

有没有一种方法可以使用 Tensorboard 在一个绘图中绘制多个图形,或者有其他方法可以做到这一点吗?

谢谢

【问题讨论】:

标签: tensorflow keras tensorboard


【解决方案1】:

如果您使用的是 tensorboardX 或 pytorch 1.2 中的 SummaryWriter,您有一个名为 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)

【讨论】:

  • 在你的例子中'nf'代表什么?
  • @BramVanroy 这是一种交易模型,nf 表示“无费用”,计算分数时不考虑费用。它特定于我的用例,您可以随意命名标量(损失、性能、my_param ...)
  • @BenjaminCrouzier 我正在尝试您的建议,但它似乎没有将具有相同前缀的标量迹线组合成一个图。有什么技巧需要注意吗?
  • 同理,地块水平相邻放置,但仍用不同的标签分开。
  • 我在来到这里之前就开始这样做了,但是这个答案中推荐的方法并不是这里提出的问题的解决方案。我还想在 PyTorch 中执行此操作,同时保留干净的文件夹结构。我在这里发布了我的答案:stackoverflow.com/a/62203250/5235274
【解决方案2】:
  • 您绝对可以绘制像损失和验证准确性这样的标量:tf.summary.scalar("loss", cost) 其中成本是张量 cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_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) where 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

  • 您可以绘制的其他内容是权重、输入

  • 你也可以在张量板上显示图片

  • 我认为,如果您在 tensorflow 1.5 中使用 keras,那么使用 tensorboard 很容易,因为在 tensorflow 1.5 中,keras 作为其官方高级 api 包含在内

  • 我相信您可以通过使用具有不同日志路径的不同 FileWriter 实例为具有不同超参数的同一模型在同一个图表上绘制不同的精度

  • 查看下图:

  • 我不知道你是否可以在同一张图上绘制不同模型的不同精度...但是你可以编写一个程序来做到这一点

  • 您可以将不同模型的摘要信息写入不同的目录,然后将张量板指向父目录,以在同一图表上绘制不同模型的准确度,如@RobertLugg 评论中所建议的那样

=====================更新=================

我尝试将不同模型的准确性和损失保存到不同的目录,然后让 tensorboard 指向父目录,它可以工作,您将在同一张图中获得不同模型的结果。我自己试过了,效果很好。

【讨论】:

  • 如果我理解正确,这个答案并没有解释如何在一个图表上放置多个值。可能需要将摘要信息写入各个子目录并将 TensorBoard 指向父目录
  • 是的,你是对的@RobertLugg ...我在回答中包含了这个...我忘了展示如何在同一个图中绘制不同的摘要
【解决方案3】:

只需将每次运行保存在主文件夹下的不同文件夹中,然后在主文件夹上打开 tensorboard。

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:

tensorboard --logdir=logs

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2013-01-14
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多