我编写了一个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,因为其他软件包依赖于...
我发现的解决方案由两部分组成。