def run_training(**kwargs): from sipga.common.experiment_analysis import EnvironmentEvaluator alg = kwargs.pop('alg') env_id = kwargs.pop('env_id') logger_kwargs = kwargs.pop('logger_kwargs') log_dir = logger_kwargs['log_dir'] learn_fn = utils.get_learn_function(alg) evaluator = EnvironmentEvaluator(log_dir=log_dir) ac, env = learn_fn(env_id, logger_kwargs=logger_kwargs, **kwargs) evaluator.eval(env=env, ac=ac, num_evaluations=32)
def check_alg(alg_name, env_id): """" Run one epoch update with algorithm.""" print(f'Run {alg_name}.') defaults = U.get_defaults_kwargs(alg=alg_name, env_id=env_id) defaults['epochs'] = 1 defaults['num_mini_batches'] = 4 defaults['steps_per_epoch'] = 1000 defaults['verbose'] = False learn_fn = U.get_learn_function(alg_name) defaults['logger_kwargs'] = setup_logger_kwargs(exp_name='unittest', seed=None, base_dir='/var/tmp/', datestamp=True, use_tensor_board=True, verbose=False) return learn_fn(env_id, **defaults)
def fit(self, epochs=None, env=None): """ Train the model for a given number of epochs. Parameters ---------- epochs: int Number of epoch to train. If None, use the standard setting from the defaults.py of the corresponding algorithm. env: gym.Env provide a custom environment for fitting the model, e.g. pass a virtual environment (based on NN approximation) Returns ------- None """ assert self.compiled, 'Call model.compile() before model.fit()' if self.multi_thread: # start all tasks which are stored in the scheduler self.scheduler.run() else: # single thread training if epochs is None: epochs = self.kwargs.pop('epochs') else: self.kwargs.pop('epochs') # pop to avoid double kwargs # fit() can also take a custom env, e.g. a virtual environment env_id = self.env_id if env is None else env learn_func = utils.get_learn_function(self.alg) ac, env = learn_func( env_id=env_id, logger_kwargs=self.logger_kwargs, epochs=epochs, **self.kwargs ) self.model = ac self.env = env self.trained = True