import json import math import random import torch def GetDevice(): return torch.device("cuda" if torch.cuda.is_available() else "cpu") def RandomCode(): code = ''; chars = '0123456789abcdef' count = 8; for i in range(0, count): code += chars[math.floor(random.randrange(len(chars)))] return code def RoundNumber(number): suffixes = ['', 'k', 'm', 'b'] if number < 1000: return str(number) magnitude = 0 while abs(number) >= 1000: magnitude += 1 number /= 1000.0 return '{:.0f}{}'.format(number, suffixes[magnitude]) def GetNumParams(model): size = sum(p.numel() for p in model.parameters()) rounded_size = RoundNumber(size) return size, rounded_size class Config: def __init__(self, data): for key, value in data.items(): if isinstance(value, dict): setattr(self, key, Config(value)) else: setattr(self, key, value) class ConfigParser: def __init__(self, path: str): with open(path, 'r') as f: json_dict = json.load(f) #config = json.loads(json_str, object_hook=lambda x: SimpleNamespace(**x)) config = Config(json_dict) self.config = config