如何在不打开新类别的情况下将图像数据写入张量板

问题描述 投票:0回答:1

我编写了一个Keras / Tensorflow回调,该回调将一个混淆矩阵写入Tensorboard中的Images选项卡。这在TF 2.1中很好用。不幸的是,我不得不将其转换为TF 1.14,因为其他软件包都依赖于此版本。

除Tensorboard报告外,一切正常(或多或少)。>>

问题

正如您在下面的屏幕快照中所看到的,有很多类别(?标签?通道?我不确定该术语),而不仅仅是一个。

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作为一个整数,这应该使Tensorboard在图像上添加小滑块以显示矩阵的历史。

模型训练如下:

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 / Tensorflow回调,该回调将一个混淆矩阵写入Tensorboard中的Images选项卡。这在TF 2.1中很好用。不幸的是,我不得不将其转换为TF 1.14,因为其他软件包依赖于...

python tensorflow keras callback tensorboard
1个回答
0
投票

我发现的解决方案由两部分组成。

© www.soinside.com 2019 - 2024. All rights reserved.