Modifying TensorBoard in TensorFlow 2.0

人走茶凉 提交于 2021-02-07 03:31:48

问题


I'm following Sentdex's DQN tutorial. I'm stuck trying to rewrite custom TensorBoard in TF 2.0. The point is to add **stats to a file, for example: {'reward_avg': -99.0, 'reward_min': -200, 'reward_max': 2, 'epsilon': 1} Original code:

class ModifiedTensorBoard(TensorBoard):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.step = 1
        self.writer = tf.summary.FileWriter(self.log_dir)

    # Custom method for saving own metrics
    # Creates writer, writes custom metrics and closes writer
    def update_stats(self, **stats):
        self._write_logs(stats, self.step)

My attempt:

def update_stats(self, **stats):
    for name, value in stats.items():
        with self.writer.as_default():
            tf.summary.scalar(name, value, self.step)

This way I'm getting: TypeError: unsupported operand type(s) for +: 'ModifiedTensorBoard' and 'list'


回答1:


I followed the same tutorial, here's what I did to make it work:

Here's the ModifiedTensorBoard Class:

class ModifiedTensorBoard(TensorBoard):

    # Overriding init to set initial step and writer (we want one log file for all .fit() calls)
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.step = 1
        self.writer = tf.summary.create_file_writer(self.log_dir)
        self._log_write_dir = os.path.join(self.log_dir, MODEL_NAME)

    # Overriding this method to stop creating default log writer
    def set_model(self, model):
        pass

    # Overrided, saves logs with our step number
    # (otherwise every .fit() will start writing from 0th step)
    def on_epoch_end(self, epoch, logs=None):
        self.update_stats(**logs)

    # Overrided
    # We train for one batch only, no need to save anything at epoch end
    def on_batch_end(self, batch, logs=None):
        pass

    # Overrided, so won't close writer
    def on_train_end(self, _):
        pass

    def on_train_batch_end(self, batch, logs=None):
        pass

    # Custom method for saving own metrics
    # Creates writer, writes custom metrics and closes writer
    def update_stats(self, **stats):
        self._write_logs(stats, self.step)

    def _write_logs(self, logs, index):
        with self.writer.as_default():
            for name, value in logs.items():
                tf.summary.scalar(name, value, step=index)
                self.step += 1
                self.writer.flush()


来源:https://stackoverflow.com/questions/58711624/modifying-tensorboard-in-tensorflow-2-0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!