在 TensorFlow 2.0 中修改 TensorBoard [英] Modifying TensorBoard in TensorFlow 2.0

查看:59
本文介绍了在 TensorFlow 2.0 中修改 TensorBoard的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在关注 Sentdex 的 DQN 教程.我一直在尝试在 TF 2.0 中重写自定义 TensorBoard.重点是在文件中添加**stats,例如:{'reward_avg': -99.0, 'reward_min': -200, 'reward_max': 2, 'epsilon': 1}原始代码:

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)

我的尝试:

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

这种方式我得到:TypeError: unsupported operand type(s) for +: 'ModifiedTensorBoard' and 'list'

推荐答案

我遵循了相同的教程,这是我为使其工作所做的工作:

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

这是 ModifiedTensorBoard 类:

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()

这篇关于在 TensorFlow 2.0 中修改 TensorBoard的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆