python - 如何在不打开新类别的情况下将图像数据写入tensorboard

标签 python tensorflow keras callback tensorboard

我编写了一个 Keras/Tensorflow 回调,将混淆矩阵写入 Tensorboard 中的“图像”选项卡。这在 TF 2.1 中运行良好。不幸的是,我必须将其转换为 TF 1.14,因为其他软件包依赖于此版本。

除了 Tensorboard 报告之外,一切都运行良好(或多或少)。

问题

正如您在下面的屏幕截图中看到的,有很多类别(?标签? channel ?我不确定术语),而不是只有一个。

screenshot: multiple categories for images

似乎与这个问题相关,像“val_loss”这样的训练标量只绘制第一个数据点,之后什么也不绘制。查看第二张截图

screenshot: scalars showing one data point

此外,Tensorboard 正在打印以下错误:
File <path/to/event-file> updated even though the current file is <path/to/new-event-file>

所以我认为我的 TF FileWriters 在写入位置上存在分歧。

关于混淆矩阵回调:编写函数如下所示:

def _figure_to_summary(self, fig, step):

    # attach a new canvas if not exists
    if fig.canvas is None:
        matplotlib.backends.backend_agg.FigureCanvasAgg(fig)

    fig.canvas.draw()

    w, h = fig.canvas.get_width_height()

    img = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
    img = img.reshape((1, h, w, 3))

    with K.get_session().as_default():
        tensor = tf.constant(img)
        image = tf.summary.image(self.title, tensor).eval()
        self._summary_writer.add_summary(image, global_step=step)
        self._summary_writer.flush()

fig 是混淆矩阵的 matplot 图,step 为 int,这应该使 Tensorboard 能够在图像上添加小 slider 以显示矩阵的历史记录。

模型训练如下:

run_id = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
tb_path = os.path.join("tensor/", run_id)

tb_reporter = TensorBoard(tb_path)
summ_wr = FileWriter(tb_path)

conf_matr = ConfusionMatrix(va, TARGET_CLASSES.keys(), summ_wr, normalize=True)
cb_list = [tb_reporter, conf_matr]
model.fit(tr, epochs=500, validation_data=va, callbacks=cb_list)

哪里summ_wr变成self._summary_writer回调。

我尝试了什么

我只是尝试改变摘要的编写方式。尝试 tf.merge_all(),以各种组合打开、关闭和重新打开 FileWriter,但没有任何改变。当我停用自定义回调时,Tensorboard 回调将按预期工作。

我的问题

如何每次将图像数据写入同一类别?

图像会出现滚动条吗?

如何解决 Keras Tensorboard 回调不显示其数据的问题?

我认为所有问题都是相关的,解决一个问题就可以解决所有问题,但我完全不知道如何做到这一点。

非常感谢您的建议:)

编辑: 我刚刚发现这个问题:Tensorboard Image Summaries 这似乎解决了问题,不幸的是答案没有很多上下文,所以我不知道如何将解决方案集成到代码中。

最佳答案

我找到的解决方案由两部分组成。

首先:我从 keras 的 Tensorboard 回调中窃取了 FileWriterTensorboard.writer 包含调用 set_model 后的 FileWriter

第二:Summary 必须通过构造函数创建并传递 tag 关键字。这迫使图像进入同一组,并且作者不会互相干扰。

我在这里找到了解决方案的第二部分:TensorBoard: How to write images to get a steps slider?

关于python - 如何在不打开新类别的情况下将图像数据写入tensorboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60197707/

相关文章:

python - 如何在 django web 应用程序中显示 csv 文件的行数和列数

python - 如何在 Python 中获取处理器名称?

python - 从 Django QuerySet 获取 SQL

python - 如何将 sklearn MinMaxScaler() 的值转换回实际值?

python - Keras 中的 EarlyStopping 会保存最好的模型吗?

python - Heroku 忽略 runtime.txt 文件

python - 在 Amazon SageMaker 中进行预测之前预处理输入数据

python - 张量板中 enqueue_input 和 Globe_step/sec 的含义是什么以及如何解释该数字?

tensorflow - 在优化器期间保持变量不变

machine-learning - 如何使用屏蔽层修复 keras 中 LSTM 的激活层尺寸