将两个指标写入相同的张量板图 - tensorflow v2

Write two metrics the same tensorboard graph - tensorflow v2

我正在尝试每 X 批次 编写训练集和验证集的损失。我基于计算值的 tensorflow v2 编写了一个 karas 回调,但我不知道如何将它们放在同一个图中。这是我所做的:

    def __init__(self, log_dir, train_data, validation_data, calculation_freq, num_train_batches, num_validation_batches):
        self.batch = 0
        self.train_data = train_data
        self.validation_data = validation_data
        self.calc_freq = calculation_freq
        self.num_train_batches = num_train_batches
        self.num_validation_batches = num_validation_batches
        self.log_dir = log_dir
        self.model = model
        self.eval_validation = validation_data is not None
        train_tensor_board_path = self.log_dir + '_train'
        if not os.path.exists(train_tensor_board_path):
            os.makedirs(train_tensor_board_path)

        self.train_writer = tf.summary.create_file_writer(train_tensor_board_path)
        self.train_writer.set_as_default()
        if self.eval_validation:
           validation_tensor_board_path = self.log_dir + '_validation'
           if not os.path.exists(validation_tensor_board_path):
               os.makedirs(validation_tensor_board_path)
           self.validation_writer = tf.summary.create_file_writer(validation_tensor_board_path)
           self.validation_writer.set_as_default()

    def on_batch_end(self, batch, logs={}):
            print('Batch number:', self.batch)
            if self.batch % self.calc_freq == 0:
                train_loss = self.model.evaluate(train_data, steps=num_train_batches)
                tf.summary.scalar('loss', float(train_loss), step=self.batch)
                self.train_writer.flush()
                if self.eval_validation:
                    validation_loss = self.model.evaluate(validation_data, steps=num_validation_batches)
                    tf.summary.scalar('loss', float(validation_loss), step=self.batch)
                    self.validation_writer.flush()

            self.batch += 1
            print('Write to tensorboard')

    def on_train_end(self, _):
        self.train_writer.close()
        if self.eval_validation:
            self.validation_writer.close()``` 

由于写入到 current 默认摘要编写器 [1] 并且每个摘要点都与一个完整的步长值相关联,请尝试更改每个摘要的上下文使用 with ... .as_default():.

将阶段(训练或验证)添加到当前默认摘要编写器
    def on_batch_end(self, batch, logs={}):
            print('Batch number:', self.batch)
            if self.batch % self.calc_freq == 0:
                train_loss = self.model.evaluate(train_data, steps=num_train_batches)
                with self.train_writer.as_default(): # current default summary
                    tf.summary.scalar('loss', float(train_loss), step=self.batch)
                self.train_writer.flush()
                if self.eval_validation:
                    validation_loss = self.model.evaluate(validation_data, steps=num_validation_batches)
                    with self.validation_writer.as_default(): # current default summary
                        tf.summary.scalar('loss', float(validation_loss), step=self.batch)
                    self.validation_writer.flush()

            self.batch += 1
            print('Write to tensorboard')