|
|
|
|
|
|
|
|
|
|
|
|
|
import importlib |
|
import random |
|
import numpy as np |
|
from typing import Mapping, Optional |
|
|
|
import torch |
|
|
|
def initiate_from_config(config: Mapping): |
|
assert "target" in config, f"Expected key `target` to initialize!" |
|
module, cls = config["target"].rsplit(".", 1) |
|
meta_class = getattr(importlib.import_module(module, package=None), cls) |
|
return meta_class(**config.get("params", dict())) |
|
|
|
def initiate_from_config_recursively(config: Mapping): |
|
assert "target" in config, f"Expected key `target` to initialize!" |
|
update_config = {"target": config["target"], "params": {}} |
|
for k, v in config["params"].items(): |
|
if isinstance(v, Mapping) and "target" in v: |
|
sub_instance = initiate_from_config_recursively(v) |
|
update_config["params"][k] = sub_instance |
|
else: |
|
update_config["params"][k] = v |
|
return initiate_from_config(update_config) |
|
|
|
def seed_everything(seed: Optional[int] = None): |
|
seed = int(seed) |
|
random.seed(seed) |
|
np.random.seed(seed) |
|
torch.manual_seed(seed) |
|
torch.backends.cudnn.deterministic = True |