将TensorBoard 2中的2个绘图与TensorFlow 2合并

将TensorBoard 2中的2个绘图与TensorFlow 2合并,tensorflow,keras,tensorboard,Tensorflow,Keras,Tensorboard,我想使用Tensorflow和tensorboard V2在同一个图上合并精度和召回率。我找到了许多以前版本的示例,但没有一个在我的案例中有效 我创建了一个Keras回调来计算精度和召回率,然后调用tensorflow摘要将它们记录在同一个记录器中。我可以在Tensorboard中看到它们,但是在两个独立的图中 类分类报告(回调): 定义初始化(self、数据生成器、步骤、标签名称、日志目录): """ 实例化器 :param data_generator:生成输入数据的数据生成器 :参数步骤:

我想使用Tensorflow和tensorboard V2在同一个图上合并精度和召回率。我找到了许多以前版本的示例,但没有一个在我的案例中有效

我创建了一个Keras回调来计算精度和召回率,然后调用tensorflow摘要将它们记录在同一个记录器中。我可以在Tensorboard中看到它们,但是在两个独立的图中

类分类报告(回调):
定义初始化(self、数据生成器、步骤、标签名称、日志目录):
"""
实例化器
:param data_generator:生成输入数据的数据生成器
:参数步骤:int,批次大小
:param data_type,字符串,“training”、“validation”或“test”,在日志中使用前缀
:param log_directory:pathlib2指向TensorBoard日志目录的路径
"""
self.data\u generator=数据\u generator
self.steps=步骤
self.data\u type=数据类型
self.logger=tensorflow.summary.create_file_writer(str(log_目录/self.data_类型))
SKEXE分类报告中要考虑的标量的名称
self._scalar_names=['precision','recall']
_epoch_end上的def(self、epoch、logs={}):
"""
记录精度和召回率
:param epoch:int,纪元数
:param logs:存储度量的Keras字典
"""
y_true=numpy.zero(自步数)
y_predicted=numpy.zero(自步数)
…在这里,我用数据生成器获取y_true和y_predicted
#当前报告由SciKit Learn计算
当前报告=分类报告(y为真,y为预测,输出为真)
使用self.logger.as_default():
对于self.\u标量\u名称中的标量\u名称:
tensorflow.summary.scalar(
name=“{}/macro average/{}”格式(self.data类型,标量名称),
数据=当前报告['macro avg'][标量名称],
步长=历元)
返回超级()。在\u历元\u结束时(历元,日志)

就我所理解的Tensorboard 2逻辑而言,似乎不可能在同一个图上绘制2个标量摘要。。。在此阶段欢迎任何建议。

使用两个具有相同标量摘要名称的不同编写器

import numpy as np
import tensorflow as tf

logger1 = tf.summary.create_file_writer('logs/scalar/precision')
logger2 = tf.summary.create_file_writer('logs/scalar/recall')

precision = np.random.uniform(size=10)
recall = np.random.uniform(size=10)

for i in range(10):
    with logger1.as_default():
        tf.summary.scalar(name='precision-recall', data=precision[i], step=i)
    with logger2.as_default():
        tf.summary.scalar(name='precision-recall', data=recall[i], step=i)
tensorboard—logdir日志/标量


根据此答案(适用于tf2):

使用两个具有相同标量摘要名称的不同编写器

import numpy as np
import tensorflow as tf

logger1 = tf.summary.create_file_writer('logs/scalar/precision')
logger2 = tf.summary.create_file_writer('logs/scalar/recall')

precision = np.random.uniform(size=10)
recall = np.random.uniform(size=10)

for i in range(10):
    with logger1.as_default():
        tf.summary.scalar(name='precision-recall', data=precision[i], step=i)
    with logger2.as_default():
        tf.summary.scalar(name='precision-recall', data=recall[i], step=i)
tensorboard—logdir日志/标量


根据这个答案,对tf2:

进行了调整,这非常有效。我在总结逻辑中遗漏了一些东西。谢谢!那很好用。我在总结逻辑中遗漏了一些东西。谢谢!