def main(): '''Main script function.''' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' tf.logging.set_verbosity(tf.logging.ERROR) parser = argparse.ArgumentParser() parser.add_argument("path", help="The path to save the results.") parser.add_argument("--alg", help="The algorithm to use.", default='PPO') parser.add_argument("--env_name", help="The gamma to use.", default='MultiOptLRs-v0') parser.add_argument('--total_timesteps', default=int(1e5), type=int, help="Number of timesteps per training session") parser.add_argument('--data_set', help="The data set to use.", default='iris') parser.add_argument('--trials', help="The number of trials to run.", default=10, type=int) args = parser.parse_args() parameters = vars(args).copy() del parameters['trials'] path = Path(parameters['path']) if not path.exists(): path.mkdir() parameters['kwargs'] = {'data_set': parameters['data_set']} utils_file.save_json(parameters, path / 'parameters.json') else: if (path / 'study.db').exists(): print('Directory exists. Using existing study and parameters.') parameters = utils_file.load_json(path / 'parameters.json') else: raise FileExistsError(('Directory already exists and is not a ' 'study.')) storage = 'sqlite:///' + str(path / 'study.db') study = optuna.create_study( study_name=str(path.name), storage=storage, load_if_exists=True, pruner=optuna.pruners.MedianPruner() ) print(study.best_value) print(study.best_trial.number) print(study.best_params) #params = study.best_params param_file = path / str(study.best_trial.number) / 'parameters.json' params = utils_file.load_json(param_file) kwargs = params['kwargs'] parameters.update({ 'path': path / str(study.best_trial.number), 'gamma': params['gamma'], 'learning_rate': params['learning_rate'], 'kwargs': { #'batch_size': int(params['batch_size']), 'max_batches': int(kwargs['max_batches']), 'max_history': int(kwargs['max_history']), 'max_batches': 1e3 } }) live_plot(run_experiment(parameters), 'test')
def test_load_json(save_path): '''Test load_json function.''' path = create_test_file(save_path, name='test_load_json0') dictionary = utils_file.load_json(path) for i, (name, value) in enumerate(dictionary.items()): assert i == value assert name == chr(97 + i) path = create_test_file(save_path, name='test_load_json1', version=1) dictionary = utils_file.load_json(path, line_no=5) assert len(dictionary) == 26 - 5 for i, (name, value) in enumerate(dictionary.items()): assert i == value assert name == chr(97 + i)
def main(): '''Main script function.''' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' tf.logging.set_verbosity(tf.logging.ERROR) parser = argparse.ArgumentParser() parser.add_argument("path", help="The path to save the results.") parser.add_argument("--alg", help="The algorithm to use.", default='MADDPG', type=str.upper) parser.add_argument("--env_name", help="The gamma to use.", default='simple_spread') parser.add_argument('--total_timesteps', default=int(1e6), type=int, help="Number of timesteps per training session") parser.add_argument('--trials', help="The number of trials to run.", default=10, type=int) args = parser.parse_args() parameters = vars(args).copy() del parameters['trials'] path = Path(parameters['path']) if not path.exists(): path.mkdir() utils_file.save_json(parameters, path / 'parameters.json') else: if (path / 'study.db').exists(): print('Directory exists. Using existing study and parameters.') parameters = utils_file.load_json(path / 'parameters.json') else: raise FileExistsError(('Directory already exists and is not a ' 'study.')) objective = partial(run_experiment, parameters) storage = 'sqlite:///' + str(path / 'study.db') study = optuna.create_study(study_name=str(path.name), storage=storage, load_if_exists=True, pruner=optuna.pruners.MedianPruner()) study.optimize(objective, n_trials=args.trials)
def test_save_json(save_path): '''Test save_json function.''' data = {chr(97 + i): i for i in range(26)} path = save_path / 'test_save_json.json' utils_file.save_json(data, path) dictionary = utils_file.load_json(path) for i, (name, value) in enumerate(dictionary.items()): assert i == value assert name == chr(97 + i)
def main(): '''Evaluate a trained model against logistic regression.''' os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' tf.logging.set_verbosity(tf.logging.ERROR) parser = argparse.ArgumentParser() parser.add_argument("path", help="The path to save the results.") parser.add_argument("--trials", help="The number of trials.", type=int, default=10) parser.add_argument("--total_epochs", help="The number of epochs.", type=int, default=40) parser.add_argument("--data_set", help="The data set to trial against.", type=str, default='iris') args = parser.parse_args() parameters = vars(args).copy() del parameters['trials'] path = Path(parameters['path']) if not path.exists(): path.mkdir() utils_file.save_json(parameters, path / 'parameters.json') else: if (path / 'study.db').exists(): print('Directory exists. Using existing study and parameters.') parameters = utils_file.load_json(path / 'parameters.json') else: raise FileExistsError(('Directory already exists and is not a ' 'study.')) objective = partial(train_model, parameters) storage = 'sqlite:///' + str(path / 'study.db') study = optuna.create_study(study_name=str(path.name), storage=storage, load_if_exists=True, pruner=optuna.pruners.MedianPruner()) study.optimize(objective, n_trials=args.trials)
def task(path, seed, batch_size=None, total_epochs=40, data_set='mnist'): ''' Run the agent on a data set. ''' parameters = utils_file.load_json(path / 'hyperparams.json') alg, *_ = path.name.split('-') save_path = path / 'model.pkl' sequence = load_data(data_set) num_of_samples = len(sequence.features) steps_per_epoch = ceil(num_of_samples / batch_size) if batch_size else 1 kwargs = parameters.get('kwargs', {}) kwargs['data_set'] = data_set kwargs['batch_size'] = batch_size kwargs['max_batches'] = steps_per_epoch * total_epochs env = partial(gym.make, parameters['env_name'], **kwargs) vec_env = OptVecEnv([env]) if alg == 'PPO': with open(save_path, 'rb') as pkl: model = PPO2.load(pkl) # , env=vec_env) elif alg == 'A2C': with open(save_path, 'rb') as pkl: model = A2C.load(pkl, env=vec_env) elif alg == 'DDPG': model = DDPG.load(save_path, env=vec_env) states = vec_env.reset() info_list = [] cumulative_reward = 0 for epoch_no in trange(total_epochs, leave=False): for step in trange(steps_per_epoch, leave=False): actions = model.predict(states, deterministic=False)[0] states, rewards, _, infos = vec_env.step(actions) cumulative_reward = cumulative_reward + rewards[0] info = infos[0] info['step'] = epoch_no * steps_per_epoch + step info['cumulative_reward'] = cumulative_reward info['seed'] = seed info['epoch'] = epoch_no info_list.append(info) return info_list