【问题标题】:Modified TensorBoard on Sendex Tutorial in tf2.0tf2.0中Sendex教程修改TensorBoard
【发布时间】:2020-12-06 13:02:19
【问题描述】:

我尝试使用 Daniel 中的 this 教程中编写的 ModifiedTensorBoard 类

我找到了这个替代方案solution,但我在尝试时收到了这个错误代码。

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

在 _write_logs 方法中出现此错误 Context manager 'generator' doesn't implement __enter__ and __exit__.pylint(not-context-manager)

我也收到了我的 ModifiedTensorBoard 中没有 _train_step 的错误。

'ModifiedTensorBoard' object has no attribute '_train_step'

有人遇到同样的问题吗?

【问题讨论】:

标签: tensorflow tensorboard


【解决方案1】:

我也遇到了一些错误,但不幸的是,那是几个月前的事了。也许试试这样吧。

from tensorflow.keras.callbacks import TensorBoard 
import tensorflow as tf
import os

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)

# Overriding this method to stop creating default log writer
def set_model(self, model):
    self.model = model
    self._log_write_dir = self.log_dir
    self._train_dir = os.path.join(self._log_write_dir, 'train')
    self._train_step = self.model._train_counter

    self._val_dir = os.path.join(self._log_write_dir, 'validation')
    self._val_step = self.model._test_counter

    self._should_write_train_graph = False
# 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 _write_logs(self, logs, index):
    with self.writer.as_default():
        for log in logs.items():
            tf.summary.scalar(log[0],log[1],step=index)
            #self.writer.
            # (summary, index)
        
# 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)

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2019-04-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2020-07-30
    • 2021-01-29
    • 2019-11-24
    相关资源
    最近更新 更多