使用 Tensorboard 在一张图中绘制多个图

Posted

技术标签:

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

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

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

谢谢

【问题讨论】:

查看TensorBoard - Plot training and validation losses on the same graph?的答案。 【参考方案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 中执行此操作,同时保留干净的文件夹结构。我在这里发布了我的答案:***.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

【讨论】:

以上是关于使用 Tensorboard 在一张图中绘制多个图的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib 在一张图中绘制多个条形图

python matplotlib怎么在一张图上画多条曲线?Python处理多个csv文件生成叠加曲线图——综合示例:平滑处理图注图例图题范围缩放

在一张图中绘制多个箱线图

在一张图中绘制多个 pandas 数据框

python 将多个数据图绘制到一张图上

在一张图中绘制多条线[重复]