Beispiel #1
0
def main():

    try:
        cmd_args, _ = get_common_cmd_args()

        output_basedir = cmd_args.output_basedir
        model_name = cmd_args.model_name
        if model_name == "resnet20":
            cfg2funcparams = cfg2funcparams_nas_resnet20
            get_cs = get_cs_nas_resnet20
        else:
            raise ValueError(f"model name {model_name} is wrong")

        logger = logging.getLogger(f"RANDOM-NAS-{model_name}")
        logger.setLevel(logging.DEBUG)

        expid = get_experiment_id(6)
        output_dir = os.path.join(output_basedir, "RANDOM", model_name, expid)
        os.makedirs(output_dir, exist_ok=True)
        log_path = os.path.join(output_dir, f"RANDOM-NAS-{model_name}.log")
        setup_logger(logger, log_path)

        logger.info(f"Experiment {expid} starts...")
        logger.info("Experiment Configuration:")
        logger.info(vars(cmd_args))

        def obj_func(cfg):
            logger.info("Starting BO iteration")
            params = cfg2funcparams(cfg)
            obj_info = nas_train_test(cmd_args,
                                      params,
                                      logger,
                                      model_name=model_name)
            logger.info("Finishing BO iteration")
            logger.info(params)
            logger.info(obj_info)

            all_info = {
                "params": params,
                "obj_info": obj_info,
            }
            fn_path = os.path.join(output_dir, "random_iter_hists.txt")
            with open(fn_path, "a") as f:
                json.dump(all_info, f)
                f.write("\n")

            return obj_info["value"]

        cs = get_cs()
        for i in range(100):
            cfg = cs.sample_configuration()
            obj_func(cfg)

    except KeyboardInterrupt:
        print("Interrupted. You pressed Ctrl-C!!!")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)
def main():

    try:
        cmd_args, _ = get_common_cmd_args()

        model_name = cmd_args.model_name

        logger = logging.getLogger(f"ADDTREE-NAS-{model_name}")
        logger.setLevel(logging.DEBUG)

        ch = logging.StreamHandler()
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter(
            "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
        )
        ch.setFormatter(formatter)
        logger.addHandler(ch)

        logger.info("Training Optimized starts...")
        logger.info("Experiment Configuration:")
        logger.info(vars(cmd_args))

        params = {
            "b1": {"method": "elu", "amount": [0.01, 0.748403908117127]},
            "b2": {"method": "leaky", "amount": [0.01, 0.99]},
            "b3": {"method": "elu", "amount": [0.01, 0.01]},
        }
        obj_info = nas_train_test(
            cmd_args,
            params,
            logger,
            model_name=model_name,
            max_epoch=200,
            lr_ms=[100, 150],
        )
        logger.info(obj_info)
    except KeyboardInterrupt:
        print("Interrupted. You pressed Ctrl-C!!!")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)
Beispiel #3
0
def main():

    try:
        cmd_args, _ = get_common_cmd_args()

        output_basedir = cmd_args.output_basedir
        model_name = cmd_args.model_name
        if model_name == "resnet20":
            path2funcparam = path2funcparam_resnet20_nas
            build_tree = build_tree_resnet20_nas
            obs_sigma = 0.06
        else:
            raise ValueError(f"model name {model_name} is wrong")

        logger = logging.getLogger(f"ADDTREE-NAS-{model_name}")
        logger.setLevel(logging.DEBUG)

        expid = get_experiment_id(6)
        output_dir = os.path.join(output_basedir, "ADDTREE", model_name, expid)
        os.makedirs(output_dir, exist_ok=False)
        log_path = os.path.join(output_dir, f"ADDTREE-NAS-{model_name}.log")
        setup_logger(logger, log_path)

        logger.info(f"Experiment {expid} starts...")
        logger.info("Experiment Configuration:")
        logger.info(vars(cmd_args))
        logger.info("Observation sigma is: %f", obs_sigma)

        root = build_tree()
        obs_dim = root.obs_dim
        ss = Storage()
        ker = build_addtree(root)
        n_init = cmd_args.n_init

        for i in range(n_init):
            logger.info("=" * 50)
            logger.info(f"Starting BO {i+1} iteration (Random Design)")
            path = root.random_path(rand_data=True)
            params = path2funcparam(path[1:])
            obj_info = nas_train_test(cmd_args,
                                      params,
                                      logger,
                                      model_name=model_name)
            ss.add(
                path.path2vec(obs_dim),
                obj_info["value"],
                obs_sigma,
                path,
            )
            logger.info(f"Finishing BO {i+1} iteration")
            logger.info(params)
            logger.info(obj_info)

            all_info = {
                "iteration": i + 1,
                "params": params,
                "obj_info": obj_info
            }
            fn_path = os.path.join(output_dir, f"addtree_iter_{i+1}.json")
            with open(fn_path, "w") as f:
                json.dump(all_info, f)

        def get_kappa(t, max_iter):
            ks = np.linspace(1, 3, max_iter)
            return ks[t]

        for i in range(n_init, 100):
            logger.info("=" * 50)
            logger.info(f"Starting BO {i+1} iteration (Optimization)")
            gp = ss.optimize(ker, n_restart=5, verbose=False)
            _, _, x_best, path = optimize_acq(
                LCB,
                root,
                gp,
                ss.Y,
                obs_dim,
                grid_size=2000,
                nb_seed=8,
                kappa=get_kappa(i, 300),
            )
            path.set_data(x_best)
            params = path2funcparam(path[1:])
            obj_info = nas_train_test(cmd_args,
                                      params,
                                      logger,
                                      model_name=model_name)
            ss.add(
                path.path2vec(root.obs_dim),
                obj_info["value"],
                obs_sigma,
                path=path,
            )
            logger.info(f"Finishing BO {i+1} iteration")
            logger.info(params)
            logger.info(obj_info)
            all_info = {
                "iteration": i + 1,
                "params": params,
                "obj_info": obj_info
            }
            fn_path = os.path.join(output_dir, f"addtree_iter_{i+1}.json")
            with open(fn_path, "w") as f:
                json.dump(all_info, f)

    except KeyboardInterrupt:
        print("Interrupted. You pressed Ctrl-C!!!")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)
Beispiel #4
0
def main():

    try:
        cmd_args, _ = get_common_cmd_args()

        output_basedir = cmd_args.output_basedir
        model_name = cmd_args.model_name
        if model_name == "resnet20":
            cfg2funcparams = cfg2funcparams_nas_resnet20
            get_cs = get_cs_nas_resnet20
        else:
            raise ValueError(f"model name {model_name} is wrong")

        logger = logging.getLogger(f"SMAC-NAS-{model_name}")
        logger.setLevel(logging.DEBUG)

        expid = get_experiment_id(6)
        output_dir = os.path.join(output_basedir, "SMAC", model_name, expid)
        os.makedirs(output_dir, exist_ok=True)
        log_path = os.path.join(output_dir, f"SMAC-NAS-{model_name}.log")
        setup_logger(logger, log_path)

        logger.info(f"Experiment {expid} starts...")
        logger.info("Experiment Configuration:")
        logger.info(vars(cmd_args))

        def obj_func(cfg):
            logger.info("Starting BO iteration")
            params = cfg2funcparams(cfg)
            obj_info = nas_train_test(cmd_args, params, logger, model_name=model_name)
            logger.info("Finishing BO iteration")
            logger.info(params)
            logger.info(obj_info)

            all_info = {
                "params": params,
                "obj_info": obj_info,
            }
            fn_path = os.path.join(output_dir, "smac_iter_hists.txt")
            with open(fn_path, "a") as f:
                json.dump(all_info, f)
                f.write("\n")

            return obj_info["value"]

        # smac default do minimize
        cs = get_cs()
        scenario = Scenario(
            {
                "run_obj": "quality",  # we optimize quality (alternatively runtime)
                "runcount_limit": 100,  # maximum function evaluations
                "cs": cs,  # configuration space
                "deterministic": "true",
                "initial_incumbent": "LHD",
            }
        )

        smac = SMAC4HPO(scenario=scenario, tae_runner=obj_func,)

        incumbent = smac.optimize()
        print(incumbent)

    except KeyboardInterrupt:
        print("Interrupted. You pressed Ctrl-C!!!")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)
Beispiel #5
0
def main():

    try:
        cmd_args, _ = get_common_cmd_args()

        output_basedir = cmd_args.output_basedir
        model_name = cmd_args.model_name
        if model_name == "resnet20":
            cfg2funcparams = cfg2funcparams_nas_resnet20
            get_space = get_space_nas_resnet20
        else:
            raise ValueError(f"model name {model_name} is wrong")

        logger = logging.getLogger(f"TPE-NAS-{model_name}")
        logger.setLevel(logging.DEBUG)

        expid = get_experiment_id(6)
        output_dir = os.path.join(output_basedir, "TPE-NAS", model_name, expid)
        os.makedirs(output_dir, exist_ok=True)
        log_path = os.path.join(output_dir, f"TPE-NAS-{model_name}.log")
        setup_logger(logger, log_path)

        logger.info(f"Experiment {expid} starts...")
        logger.info("Experiment Configuration:")
        logger.info(vars(cmd_args))

        def obj_func(cfg):
            logger.info("Starting BO iteration")
            params = cfg2funcparams(cfg)
            obj_info = nas_train_test(cmd_args,
                                      params,
                                      logger,
                                      model_name=model_name)
            logger.info("Finishing BO iteration")
            logger.info(params)
            logger.info(obj_info)

            all_info = {
                "params": params,
                "obj_info": obj_info,
            }
            fn_path = os.path.join(output_dir, "tpe_iter_hists.txt")
            with open(fn_path, "a") as f:
                json.dump(all_info, f)
                f.write("\n")

            return {"loss": obj_info["value"], "status": STATUS_OK}

        space = get_space()
        trials = Trials()
        best = fmin(
            obj_func,
            space=space,
            algo=tpe.suggest,
            max_evals=100,
            trials=trials,
            show_progressbar=False,
        )
        print(best)
        logger.info("Finish TPE optimization")
        logger.info("Best is: ")
        logger.info(best)

    except KeyboardInterrupt:
        print("Interrupted. You pressed Ctrl-C!!!")
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)