diff --git a/.gitignore b/.gitignore index 3ecdfc9dd61c77ead268c28b9787b65ad31078eb..31cfe991f3cb38160cc5a2b330ca4725ebaa834f 100644 --- a/.gitignore +++ b/.gitignore @@ -56,3 +56,4 @@ htmlcov/ .pytest_cache /test/data/ report.html +/TestExperiment/ diff --git a/run.py b/run.py index 3cedc2d95260675b9045c594787d5c32aee36a8f..6b5c367dae776d7aa1c5f26d70b6b952b64e064d 100644 --- a/run.py +++ b/run.py @@ -38,25 +38,75 @@ class run(object): class ExperimentSetup: + """ + params: + trainable: Train new model if true, otherwise try to load existing model + """ - def __init__(self): + def __init__(self, **kwargs): self.data_path = None self.experiment_path = None self.experiment_name = None - self.trainable = False - self.setup_experiment() - - def setup_experiment(self): + self.trainable = None + self.fraction_of_train = None + self.use_all_stations_on_all_data_sets = None + self.network = None + self.var_all_dict = None + self.all_stations = None + self.variables = None + self.dimensions = None + self.dim = None + self.target_dim = None + self.target_var = None + self.setup_experiment(**kwargs) + + def _set_param(self, param, value, default=None): + if default is not None: + value = value.get(param, default) + setattr(self, param, value) + logging.info(f"set experiment attribute: {param}={value}") + + def setup_experiment(self, **kwargs): # set data path of this experiment - self.data_path = helpers.prepare_host() + self._set_param("data_path", helpers.prepare_host()) # set experiment name - experiment_date = parser.parse_args(["experiment_date"]) - self.experiment_name, self.experiment_path = helpers.set_experiment_name(experiment_date=experiment_date) - - # set if model shall be trained or not - self.trainable = True + exp_date = args.experiment_date + exp_name, exp_path = helpers.set_experiment_name(experiment_date=exp_date) + self._set_param("experiment_name", exp_name) + self._set_param("experiment_path", exp_path) + helpers.check_path_and_create(self.experiment_path) + + # set if model is trainable + self._set_param("trainable", kwargs, default=True) + + # set fraction of train + self._set_param("fraction_of_train", kwargs, default=0.8) + + # use all stations on all data sets (train, val, test) + self._set_param("use_all_stations_on_all_data_sets", kwargs, default=True) + self._set_param("network", kwargs, default="AIRBASE") + self._set_param("var_all_dict", kwargs, default={'o3': 'dma8eu', 'relhum': 'average_values', 'temp': 'maximum', + 'u': 'average_values', 'v': 'average_values', 'no': 'dma8eu', + 'no2': 'dma8eu', 'cloudcover': 'average_values', + 'pblheight': 'maximum'}) + self._set_param("all_stations", kwargs, default=['DEBW107', 'DEBY081', 'DEBW013', 'DEBW076', 'DEBW087', + 'DEBY052', 'DEBY032', 'DEBW022', 'DEBY004', 'DEBY020', + 'DEBW030', 'DEBW037', 'DEBW031', 'DEBW015', 'DEBW073', + 'DEBY039', 'DEBW038', 'DEBW081', 'DEBY075', 'DEBW040', + 'DEBY053', 'DEBW059', 'DEBW027', 'DEBY072', 'DEBW042', + 'DEBW039', 'DEBY001', 'DEBY113', 'DEBY089', 'DEBW024', + 'DEBW004', 'DEBY037', 'DEBW056', 'DEBW029', 'DEBY068', + 'DEBW010', 'DEBW026', 'DEBY002', 'DEBY079', 'DEBW084', + 'DEBY049', 'DEBY031', 'DEBW019', 'DEBW001', 'DEBY063', + 'DEBY005', 'DEBW046', 'DEBW103', 'DEBW052', 'DEBW034', + 'DEBY088', ]) + self._set_param("variables", kwargs, default=list(self.var_all_dict.keys())) + self._set_param("dimensions", kwargs, default={'new_index': ['datetime', 'Stations']}) + self._set_param("dim", kwargs, default='datetime') + self._set_param("target_dim", kwargs, default='variables') + self._set_param("target_var", kwargs, default="o3") class PreProcessing(run): @@ -83,11 +133,12 @@ class PostProcessing(run): if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('experiment date', metavar='exp_date', type=str, nargs=1, help='set experiment date as string', - default=None) + parser.add_argument('--experiment_date', metavar='--exp_date', type=str, nargs=1, default=None, + help="set experiment date as string") + args = parser.parse_args() with run(): - exp_setup = ExperimentSetup() + exp_setup = ExperimentSetup(trainable=True) PreProcessing(exp_setup) diff --git a/src/helpers.py b/src/helpers.py index 6f8af63be8807fc5be006786ce51b2a558a7423a..4fd5cc2b965d38a090a53dfc63e6f2d7aa582c3f 100644 --- a/src/helpers.py +++ b/src/helpers.py @@ -161,7 +161,7 @@ def prepare_host(): def set_experiment_name(experiment_date=None, experiment_path=None): if experiment_date is None: - experiment_name = "" + experiment_name = "TestExperiment" else: experiment_name = f"{experiment_date}_network/" if experiment_path is None: