def call(*args, **kwargs): global _writer if _writer is None: logdir = logger.get_dir() if logdir is None: logdir = logger.auto_set_dir(action='d') logger.warning( "[VisualDL] logdir is None, will save VisualDL files to {}\nView the data using: visualdl --logdir=./{} --host={}" .format(logdir, logdir, get_ip_address())) _writer = LogWriter(logdir=logger.get_dir()) func = getattr(_writer, func_name) func(*args, **kwargs) _writer.flush()
class VisualDL(Callback): def __init__(self, log_dir="./log", freq=1): super(VisualDL, self).__init__() self.log_dir = log_dir self.freq = freq def on_train_begin(self, logs=None): self.writer = LogWriter(self.log_dir) def on_iter_end(self, iter, logs=None): logs = logs or {} if iter % self.freq == 0 and ParallelEnv().local_rank == 0: for k, v in logs.items(): self.writer.add_scalar("Train/{}".format(k), v, iter) self.writer.flush() def on_train_end(self, logs=None): self.writer.close()
class VisualAcc(paddle.callbacks.Callback): def __init__(self, logdir, experimental_name, *, save_model_with_input=None): """ :param logdir: :param experimental_name: :param save_model_with_input: 默认不存储模型结构,当开启该参数时, """ from pyxllib.prog.pupil import check_install_package check_install_package('visualdl') from visualdl import LogWriter super().__init__() # 这样奇怪地加后缀,是为了字典序后,每个实验的train显示在eval之前 d = XlPath(logdir) / (experimental_name + '_train') # if d.exists(): shutil.rmtree(d) self.write = LogWriter(logdir=str(d)) d = XlPath(logdir) / (experimental_name + '_val') # if d.exists(): shutil.rmtree(d) self.eval_writer = LogWriter(logdir=str(d)) self.eval_times = 0 self.save_model_with_input = save_model_with_input def on_epoch_end(self, epoch, logs=None): self.write.add_scalar('acc', step=epoch, value=logs['acc']) self.write.flush() def on_eval_end(self, logs=None): self.eval_writer.add_scalar('acc', step=self.eval_times, value=logs['acc']) self.eval_writer.flush() self.eval_times += 1