import os import sys import random import errno import time import torch import numpy as np from datetime import timedelta class AverageMeter: """ Computes and stores the average and current value """ def __init__(self): self.val = 0 self.avg = 0 self.sum = 0 self.count = 0 def reset(self): self.val = 0 self.avg = 0 self.sum = 0 self.count = 0 def update(self, val): self.val = val self.sum += val self.count += 1 self.avg = self.sum / self.count def setup_system(seed, cudnn_benchmark=True, cudnn_deterministic=True) -> None: ''' Set seeds for for reproducible training ''' # python random.seed(seed) # numpy np.random.seed(seed) # pytorch torch.manual_seed(seed) torch.cuda.manual_seed_all(seed) if torch.cuda.is_available(): torch.backends.cudnn_benchmark_enabled = cudnn_benchmark torch.backends.cudnn.deterministic = cudnn_deterministic def mkdir_if_missing(dir_path): try: os.makedirs(dir_path) except OSError as e: if e.errno != errno.EEXIST: raise class Logger(object): def __init__(self, fpath=None): self.console = sys.stdout self.file = None if fpath is not None: mkdir_if_missing(os.path.dirname(fpath)) self.file = open(fpath, 'w') def __del__(self): self.close() def __enter__(self): pass def __exit__(self, *args): self.close() def write(self, msg): self.console.write(msg) if self.file is not None: self.file.write(msg) def flush(self): self.console.flush() if self.file is not None: self.file.flush() os.fsync(self.file.fileno()) def close(self): self.console.close() if self.file is not None: self.file.close()