我编写了一个 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 回调中窃取了 FileWriter
。 Tensorboard.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/