From 03c770a893be84e0a8c5e4e8227895d44e7b79f2 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 14:34:07 -0500 Subject: [PATCH 01/31] adding directly from DeepDiagnostics stuff for config --- src/utils/__init__.py | 0 src/utils/config.py | 58 +++++++++++++++++++++++++++++++++++++++++++ src/utils/defaults.py | 37 +++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/utils/__init__.py create mode 100644 src/utils/config.py create mode 100644 src/utils/defaults.py diff --git a/src/utils/__init__.py b/src/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/utils/config.py b/src/utils/config.py new file mode 100644 index 0000000..e8dc4e8 --- /dev/null +++ b/src/utils/config.py @@ -0,0 +1,58 @@ + +from typing import Optional +import os +import yaml + +from utils.defaults import Defaults + +def get_item(section, item, raise_exception=True): + return Config().get_item(section, item, raise_exception) + +def get_section(section, raise_exception=True): + return Config().get_section(section, raise_exception) + + +class Config: + ENV_VAR_PATH = "DeepDiagnostics_Config" + def __init__(self, config_path:Optional[str]=None) -> None: + if config_path is not None: + # Add it to the env vars in case we need to get it later. + os.environ[self.ENV_VAR_PATH] = config_path + else: + # Get it from the env vars + try: + config_path = os.environ[self.ENV_VAR_PATH] + except KeyError: + assert False, "Cannot load config from enviroment. Hint: Have you set the config path by pasing a str path to Config?" + + self.config = self._read_config(config_path) + self._validate_config() + + def _validate_config(self): + # Validate common + # TODO + pass + + def _read_config(self, path): + assert os.path.exists(path), f"Config path at {path} does not exist." + with open(path, 'r') as f: + config = yaml.safe_load(f) + return config + + def get_item(self, section, item, raise_exception=True): + try: + return self.config[section][item] + except KeyError as e: + if raise_exception: + raise KeyError(f"Configuration File missing parameter {e}") + else: + return Defaults[section][item] + + def get_section(self, section, raise_exception=True): + try: + return self.config[section] + except KeyError as e: + if raise_exception: + raise KeyError(e) + else: + return Defaults[section] diff --git a/src/utils/defaults.py b/src/utils/defaults.py new file mode 100644 index 0000000..43ac06a --- /dev/null +++ b/src/utils/defaults.py @@ -0,0 +1,37 @@ +Defaults = { + "common":{ + "out_dir":"./DeepDiagnosticsResources/results/", + "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", + "sim_location": "DeepDiagnosticsResources_Simulators" + }, + "model": { + "model_engine": "SBIModel" + }, + "data":{ + "data_engine": "H5Data" + }, + "plots_common": { + "axis_spines": False, + "tight_layout": True, + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels" : ['$m$','$b$'], + "parameter_colors": ['#9C92A3','#0F5257'], + "line_style_cycle": ["-", "-."], + "figure_size": [6, 6] + }, + "plots":{ + "CDFRanks":{}, + "Ranks":{"num_bins":None}, + "CoverageFraction":{} + }, + "metrics_common": { + "use_progress_bar": False, + "samples_per_inference":1000, + "percentiles":[75, 85, 95] + }, + "metrics":{ + "AllSBC":{}, + "CoverageFraction": {}, + } +} From 053cfc402e7d2447d1f4ac856a55951239183711 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 14:36:55 -0500 Subject: [PATCH 02/31] adding client.py --- src/client/client.py | 79 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/client/client.py diff --git a/src/client/client.py b/src/client/client.py new file mode 100644 index 0000000..14f5742 --- /dev/null +++ b/src/client/client.py @@ -0,0 +1,79 @@ +import os +import yaml +from argparse import ArgumentParser + +from utils.config import Config +from utils.defaults import Defaults +from data import DataModules +from models import ModelModules +from metrics import Metrics +from plots import Plots + + +def parser(): + parser = ArgumentParser() + parser.add_argument("--config", '-c', default=None) + + # Model + parser.add_argument("--model_path", '-m', default=None) + parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + + # Data + parser.add_argument("--data_path", '-d', default=None) + parser.add_argument("--data_engine", '-g', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + parser.add_argument("--simulator", '-s', default=None) + # Common + parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) + + # List of metrics (cannot supply specific kwargs) + parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) + + # List of plots + parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) + + + args = parser.parse_args() + if args.config is not None: + config = Config(args.config) + + else: + temp_config = Defaults['common']['temp_config'] + os.makedirs(os.path.dirname(temp_config), exist_ok=True) + + input_yaml = { + "common": {"out_dir":args.out_dir}, + "model": {"model_path":args.model_path, "model_engine":args.model_engine}, + "data": {"data_path":args.data_path, "data_engine":args.data_engine, "simulator": args.simulator}, + "plots": {key: {} for key in args.plots}, + "metrics": {key: {} for key in args.metrics}, + } + + yaml.dump(input_yaml, open(temp_config, "w")) + config = Config(temp_config) + + return config + +def main(): + config = parser() + + model_path = config.get_item("model", "model_path") + model_engine = config.get_item("model", "model_engine", raise_exception=False) + model = ModelModules[model_engine](model_path) + + data_path = config.get_item("data", "data_path") + data_engine = config.get_item("data", "data_engine", raise_exception=False) + simulator_name = config.get_item("data", "simulator") + data = DataModules[data_engine](data_path, simulator_name) + + out_dir = config.get_item("common", "out_dir", raise_exception=False) + if not os.path.exists(os.path.dirname(out_dir)): + os.makedirs(os.path.dirname(out_dir)) + + metrics = config.get_section("metrics", raise_exception=False) + plots = config.get_section("plots", raise_exception=False) + + for metrics_name, metrics_args in metrics.items(): + Metrics[metrics_name](model, data, **metrics_args)() + + for plot_name, plot_args in plots.items(): + Plots[plot_name](model, data, save=True, show=False, out_dir=out_dir)(**plot_args) From 8e3f4649ce472f4c75e0d187537d00e1c3008161 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 14:44:12 -0500 Subject: [PATCH 03/31] moving io.py to two places: data/ and models/ --- src/{scripts/io.py => data/data.py} | 0 src/models/models.py | 334 ++++++++++++++++++++++++++++ 2 files changed, 334 insertions(+) rename src/{scripts/io.py => data/data.py} (100%) create mode 100644 src/models/models.py diff --git a/src/scripts/io.py b/src/data/data.py similarity index 100% rename from src/scripts/io.py rename to src/data/data.py diff --git a/src/models/models.py b/src/models/models.py new file mode 100644 index 0000000..5f38eda --- /dev/null +++ b/src/models/models.py @@ -0,0 +1,334 @@ +# Contains modules used to prepare a dataset +# with varying noise properties +import argparse +import numpy as np +from sklearn.model_selection import train_test_split +import pickle +from torch.distributions import Uniform +from torch.utils.data import TensorDataset +import torch +import h5py + + +def parse_args(): + parser = argparse.ArgumentParser(description="data handling module") + parser.add_argument( + "size_df", + type=float, + required=False, + default=1000, + help="Used to load the associated .h5 data file", + ) + parser.add_argument( + "noise_level", + type=str, + required=False, + default="low", + help="low, medium, high or vhigh, \ + used to look up associated sigma value", + ) + parser.add_argument( + "size_df", + type=str, + nargs="?", + default="/repo/embargo", + help="Butler Repository path from which data is transferred. \ + Input str. Default = '/repo/embargo'", + ) + parser.add_argument( + "--normalize", + required=False, + action="store_true", + help="If true theres an option to normalize the dataset", + ) + parser.add_argument( + "--val_proportion", + type=float, + required=False, + default=0.1, + help="Proportion of the dataset to use as validation", + ) + parser.add_argument( + "--randomseed", + type=float, + required=False, + default=42, + help="Random seed used for shuffling the training and validation set", + ) + parser.add_argument( + "--batchsize", + type=float, + required=False, + default=100, + help="Size of batched used in the traindataloader", + ) + return parser.parse_args() + + +class ModelLoader: + def save_model_pkl(self, path, model_name, posterior): + """ + Save the pkl'ed saved posterior model + + :param path: Location to save the model + :param model_name: Name of the model + :param posterior: Model object to be saved + """ + file_name = path + model_name + ".pkl" + with open(file_name, "wb") as file: + pickle.dump(posterior, file) + + def load_model_pkl(self, path, model_name): + """ + Load the pkl'ed saved posterior model + + :param path: Location to load the model from + :param model_name: Name of the model + :return: Loaded model object that can be used with the predict function + """ + print(path) + with open(path + model_name + ".pkl", "rb") as file: + posterior = pickle.load(file) + return posterior + + def predict(input, model): + """ + + :param input: loaded object used for inference + :param model: loaded model + :return: Prediction + """ + return 0 + + +class DataLoader: + def save_data_pkl(self, data_name, data, path="../data/"): + """ + Save and load the pkl'ed training/test set + + :param path: Location to save the model + :param model_name: Name of the model + :param posterior: Model object to be saved + """ + file_name = path + data_name + ".pkl" + with open(file_name, "wb") as file: + pickle.dump(data, file) + + def load_data_pkl(self, data_name, path="../data/"): + """ + Load the pkl'ed saved posterior model + + :param path: Location to load the model from + :param model_name: Name of the model + :return: Loaded model object that can be used with the predict function + """ + print(path) + with open(path + data_name + ".pkl", "rb") as file: + data = pickle.load(file) + return data + + def save_data_h5(self, data_name, data, path="../data/"): + """ + Save data to an h5 file. + + :param path: Location to save the data + :param data_name: Name of the data + :param data: Data to be saved + """ + data_arrays = {key: np.asarray(value) for key, value in data.items()} + + file_name = path + data_name + ".h5" + with h5py.File(file_name, "w") as file: + # Save each array as a dataset in the HDF5 file + for key, value in data_arrays.items(): + file.create_dataset(key, data=value) + + def load_data_h5(self, data_name, path="../data/"): + """ + Load data from an h5 file. + + :param path: Location to load the data from + :param data_name: Name of the data + :return: Loaded data + """ + file_name = path + data_name + ".h5" + loaded_data = {} + with h5py.File(file_name, "r") as file: + for key in file.keys(): + loaded_data[key] = torch.Tensor(file[key][...]) + return loaded_data + + +class DataPreparation: + """ + A class for loading, preprocessing, and simulating datasets. + + Parameters: + - file_path (str): The path to the dataset file. + + Methods: + - load_data(): Load data from the specified file path. + - preprocess_data(): Preprocess the loaded data. + - simulate_data(simulation_name, num_samples=1000): + Simulate data based on the specified simulation. + - save_data(output_file='output_data.csv'): Save the current dataset to + a CSV file. + - get_data(): Retrieve the current dataset. + + Example Usage: + ``` + dataset_manager = DatasetPreparation('your_dataset.csv') + dataset_manager.load_data() + dataset_manager.preprocess_data() + dataset_manager.simulate_data('linear') + dataset_manager.save_data('simulated_data.csv') + simulated_data = dataset_manager.get_data() + ``` + + Note: Replace 'your_dataset.csv' with the actual dataset file path. + """ + + def __init__(self): + self.data = None + + def simulate_data( + self, + thetas, + sigma, + simulation_name, + x=np.linspace(0, 100, 101), + seed=13 + ): + if simulation_name == "linear_homogeneous": + # convert to numpy array (if tensor): + thetas = np.atleast_2d(thetas) + # Check if the input has the correct shape + if thetas.shape[1] != 2: + raise ValueError( + "Input tensor must have shape (n, 2) where n is \ + the number of parameter sets." + ) + + # Unpack the parameters + if thetas.shape[0] == 1: + # If there's only one set of parameters, extract them directly + m, b = thetas[0, 0], thetas[0, 1] + else: + # If there are multiple sets of parameters, + # extract them for each row + m, b = thetas[:, 0], thetas[:, 1] + rs = np.random.RandomState(seed) # 2147483648)# + # I'm thinking sigma could actually be a function of x + # if we want to get fancy down the road + # Generate random noise (epsilon) based + # on a normal distribution with mean 0 and standard deviation sigma + ε = rs.normal(loc=0, scale=sigma, size=(len(x), thetas.shape[0])) + + # Initialize an empty array to store the results + # for each set of parameters + y = np.zeros((len(x), thetas.shape[0])) + for i in range(thetas.shape[0]): + m, b = thetas[i, 0], thetas[i, 1] + y[:, i] = m * x + b + ε[:, i] + # simulated_data = pd.DataFrame({'Feature': x, 'Target': y}) + print("Linear simulation data generated.") + elif simulation_name == "quadratic": + # Example quadratic simulation + y = 3 * x**2 + 2 * x + 1 + np.random.normal(0, 1, len(x)) + else: + print( + f"Error: Unknown simulation name '{simulation_name}'. \ + No data generated." + ) + return + self.input = x + self.output = torch.Tensor(y.T) + self.output_err = ε[:, i] + # self.data = simulated_data + + def sample_params_from_prior(self, n_samples): + low_bounds = torch.tensor([0, -10], dtype=torch.float32) + high_bounds = torch.tensor([10, 10], dtype=torch.float32) + prior = Uniform(low=low_bounds, high=high_bounds) + params = prior.sample((n_samples,)) + self.params = params + + def get_dict(self): + data_dict = { + "params": self.params, + "inputs": self.input, + "output": self.output, + "output_err": self.output_err, + } + return data_dict + + def get_data(self): + return self.data + + def get_sigma(noise): + if noise == "low": + sigma = 1 + if noise == "medium": + sigma = 5 + if noise == "high": + sigma = 10 + if noise == "vhigh": + sigma = 100 + return sigma + + def normalize(inputs, ys_array, norm=False): + if norm: + # normalize everything before it goes into a network + inputmin = np.min(inputs, axis=0) + inputmax = np.max(inputs, axis=0) + outputmin = np.min(ys_array) + outputmax = np.max(ys_array) + model_inputs = (inputs - inputmin) / (inputmax - inputmin) + model_outputs = (ys_array - outputmin) / (outputmax - outputmin) + else: + model_inputs = inputs + model_outputs = ys_array + return model_inputs, model_outputs + + def train_val_split( + model_inputs, model_outputs, val_proportion=0.1, random_state=42 + ): + x_train, x_val, y_train, y_val = train_test_split( + model_inputs, + model_outputs, + test_size=val_proportion, + random_state=random_state, + ) + return x_train, x_val, y_train, y_val + + +# Example usage: +if __name__ == "__main__": + namespace = parse_args() + size_df = namespace.size_df + noise = namespace.noise_level + norm = namespace.normalize + val_prop = namespace.val_proportion + rs = namespace.randomseed + BATCH_SIZE = namespace.batchsize + sigma = DataPreparation.get_sigma(noise) + loader = DataLoader() + data = loader.load_data_h5("linear_sigma_" + str(sigma) + + "_size_" + str(size_df)) + len_df = len(data["params"][:, 0].numpy()) + len_x = len(data["inputs"].numpy()) + ms_array = np.repeat(data["params"][:, 0].numpy(), len_x) + bs_array = np.repeat(data["params"][:, 1].numpy(), len_x) + xs_array = np.tile(data["inputs"].numpy(), len_df) + ys_array = np.reshape(data["output"].numpy(), (len_df * len_x)) + inputs = np.array([xs_array, ms_array, bs_array]).T + model_inputs, model_outputs = DataPreparation.normalize(inputs, + ys_array, + norm) + x_train, x_val, y_train, y_val = DataPreparation.train_val_split( + model_inputs, model_outputs, test_size=val_prop, random_state=rs + ) + trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) + trainDataLoader = DataLoader(trainData, + batch_size=BATCH_SIZE, + shuffle=True) From a1e2c89669bfcbff54e2029f86bcce0998d1ef4c Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 14:45:29 -0500 Subject: [PATCH 04/31] removing model stuff from data.py --- src/data/data.py | 36 ------------------------------------ 1 file changed, 36 deletions(-) diff --git a/src/data/data.py b/src/data/data.py index 5f38eda..cdb5341 100644 --- a/src/data/data.py +++ b/src/data/data.py @@ -65,42 +65,6 @@ def parse_args(): return parser.parse_args() -class ModelLoader: - def save_model_pkl(self, path, model_name, posterior): - """ - Save the pkl'ed saved posterior model - - :param path: Location to save the model - :param model_name: Name of the model - :param posterior: Model object to be saved - """ - file_name = path + model_name + ".pkl" - with open(file_name, "wb") as file: - pickle.dump(posterior, file) - - def load_model_pkl(self, path, model_name): - """ - Load the pkl'ed saved posterior model - - :param path: Location to load the model from - :param model_name: Name of the model - :return: Loaded model object that can be used with the predict function - """ - print(path) - with open(path + model_name + ".pkl", "rb") as file: - posterior = pickle.load(file) - return posterior - - def predict(input, model): - """ - - :param input: loaded object used for inference - :param model: loaded model - :return: Prediction - """ - return 0 - - class DataLoader: def save_data_pkl(self, data_name, data, path="../data/"): """ From 6bcca8ceb6be9b059bfa7ede6a58888019e07919 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 14:47:29 -0500 Subject: [PATCH 05/31] removing most everything form models.py --- src/models/models.py | 276 +------------------------------------------ 1 file changed, 3 insertions(+), 273 deletions(-) diff --git a/src/models/models.py b/src/models/models.py index 5f38eda..6498958 100644 --- a/src/models/models.py +++ b/src/models/models.py @@ -13,54 +13,11 @@ def parse_args(): parser = argparse.ArgumentParser(description="data handling module") parser.add_argument( - "size_df", - type=float, - required=False, - default=1000, - help="Used to load the associated .h5 data file", - ) - parser.add_argument( - "noise_level", - type=str, - required=False, - default="low", - help="low, medium, high or vhigh, \ - used to look up associated sigma value", - ) - parser.add_argument( - "size_df", - type=str, - nargs="?", - default="/repo/embargo", - help="Butler Repository path from which data is transferred. \ - Input str. Default = '/repo/embargo'", - ) - parser.add_argument( - "--normalize", - required=False, - action="store_true", - help="If true theres an option to normalize the dataset", - ) - parser.add_argument( - "--val_proportion", - type=float, - required=False, - default=0.1, - help="Proportion of the dataset to use as validation", - ) - parser.add_argument( - "--randomseed", - type=float, - required=False, - default=42, - help="Random seed used for shuffling the training and validation set", - ) - parser.add_argument( - "--batchsize", + "--arg", type=float, required=False, default=100, - help="Size of batched used in the traindataloader", + help="Description", ) return parser.parse_args() @@ -101,234 +58,7 @@ def predict(input, model): return 0 -class DataLoader: - def save_data_pkl(self, data_name, data, path="../data/"): - """ - Save and load the pkl'ed training/test set - - :param path: Location to save the model - :param model_name: Name of the model - :param posterior: Model object to be saved - """ - file_name = path + data_name + ".pkl" - with open(file_name, "wb") as file: - pickle.dump(data, file) - - def load_data_pkl(self, data_name, path="../data/"): - """ - Load the pkl'ed saved posterior model - - :param path: Location to load the model from - :param model_name: Name of the model - :return: Loaded model object that can be used with the predict function - """ - print(path) - with open(path + data_name + ".pkl", "rb") as file: - data = pickle.load(file) - return data - - def save_data_h5(self, data_name, data, path="../data/"): - """ - Save data to an h5 file. - - :param path: Location to save the data - :param data_name: Name of the data - :param data: Data to be saved - """ - data_arrays = {key: np.asarray(value) for key, value in data.items()} - - file_name = path + data_name + ".h5" - with h5py.File(file_name, "w") as file: - # Save each array as a dataset in the HDF5 file - for key, value in data_arrays.items(): - file.create_dataset(key, data=value) - - def load_data_h5(self, data_name, path="../data/"): - """ - Load data from an h5 file. - - :param path: Location to load the data from - :param data_name: Name of the data - :return: Loaded data - """ - file_name = path + data_name + ".h5" - loaded_data = {} - with h5py.File(file_name, "r") as file: - for key in file.keys(): - loaded_data[key] = torch.Tensor(file[key][...]) - return loaded_data - - -class DataPreparation: - """ - A class for loading, preprocessing, and simulating datasets. - - Parameters: - - file_path (str): The path to the dataset file. - - Methods: - - load_data(): Load data from the specified file path. - - preprocess_data(): Preprocess the loaded data. - - simulate_data(simulation_name, num_samples=1000): - Simulate data based on the specified simulation. - - save_data(output_file='output_data.csv'): Save the current dataset to - a CSV file. - - get_data(): Retrieve the current dataset. - - Example Usage: - ``` - dataset_manager = DatasetPreparation('your_dataset.csv') - dataset_manager.load_data() - dataset_manager.preprocess_data() - dataset_manager.simulate_data('linear') - dataset_manager.save_data('simulated_data.csv') - simulated_data = dataset_manager.get_data() - ``` - - Note: Replace 'your_dataset.csv' with the actual dataset file path. - """ - - def __init__(self): - self.data = None - - def simulate_data( - self, - thetas, - sigma, - simulation_name, - x=np.linspace(0, 100, 101), - seed=13 - ): - if simulation_name == "linear_homogeneous": - # convert to numpy array (if tensor): - thetas = np.atleast_2d(thetas) - # Check if the input has the correct shape - if thetas.shape[1] != 2: - raise ValueError( - "Input tensor must have shape (n, 2) where n is \ - the number of parameter sets." - ) - - # Unpack the parameters - if thetas.shape[0] == 1: - # If there's only one set of parameters, extract them directly - m, b = thetas[0, 0], thetas[0, 1] - else: - # If there are multiple sets of parameters, - # extract them for each row - m, b = thetas[:, 0], thetas[:, 1] - rs = np.random.RandomState(seed) # 2147483648)# - # I'm thinking sigma could actually be a function of x - # if we want to get fancy down the road - # Generate random noise (epsilon) based - # on a normal distribution with mean 0 and standard deviation sigma - ε = rs.normal(loc=0, scale=sigma, size=(len(x), thetas.shape[0])) - - # Initialize an empty array to store the results - # for each set of parameters - y = np.zeros((len(x), thetas.shape[0])) - for i in range(thetas.shape[0]): - m, b = thetas[i, 0], thetas[i, 1] - y[:, i] = m * x + b + ε[:, i] - # simulated_data = pd.DataFrame({'Feature': x, 'Target': y}) - print("Linear simulation data generated.") - elif simulation_name == "quadratic": - # Example quadratic simulation - y = 3 * x**2 + 2 * x + 1 + np.random.normal(0, 1, len(x)) - else: - print( - f"Error: Unknown simulation name '{simulation_name}'. \ - No data generated." - ) - return - self.input = x - self.output = torch.Tensor(y.T) - self.output_err = ε[:, i] - # self.data = simulated_data - - def sample_params_from_prior(self, n_samples): - low_bounds = torch.tensor([0, -10], dtype=torch.float32) - high_bounds = torch.tensor([10, 10], dtype=torch.float32) - prior = Uniform(low=low_bounds, high=high_bounds) - params = prior.sample((n_samples,)) - self.params = params - - def get_dict(self): - data_dict = { - "params": self.params, - "inputs": self.input, - "output": self.output, - "output_err": self.output_err, - } - return data_dict - - def get_data(self): - return self.data - - def get_sigma(noise): - if noise == "low": - sigma = 1 - if noise == "medium": - sigma = 5 - if noise == "high": - sigma = 10 - if noise == "vhigh": - sigma = 100 - return sigma - - def normalize(inputs, ys_array, norm=False): - if norm: - # normalize everything before it goes into a network - inputmin = np.min(inputs, axis=0) - inputmax = np.max(inputs, axis=0) - outputmin = np.min(ys_array) - outputmax = np.max(ys_array) - model_inputs = (inputs - inputmin) / (inputmax - inputmin) - model_outputs = (ys_array - outputmin) / (outputmax - outputmin) - else: - model_inputs = inputs - model_outputs = ys_array - return model_inputs, model_outputs - - def train_val_split( - model_inputs, model_outputs, val_proportion=0.1, random_state=42 - ): - x_train, x_val, y_train, y_val = train_test_split( - model_inputs, - model_outputs, - test_size=val_proportion, - random_state=random_state, - ) - return x_train, x_val, y_train, y_val - - # Example usage: if __name__ == "__main__": namespace = parse_args() - size_df = namespace.size_df - noise = namespace.noise_level - norm = namespace.normalize - val_prop = namespace.val_proportion - rs = namespace.randomseed - BATCH_SIZE = namespace.batchsize - sigma = DataPreparation.get_sigma(noise) - loader = DataLoader() - data = loader.load_data_h5("linear_sigma_" + str(sigma) + - "_size_" + str(size_df)) - len_df = len(data["params"][:, 0].numpy()) - len_x = len(data["inputs"].numpy()) - ms_array = np.repeat(data["params"][:, 0].numpy(), len_x) - bs_array = np.repeat(data["params"][:, 1].numpy(), len_x) - xs_array = np.tile(data["inputs"].numpy(), len_df) - ys_array = np.reshape(data["output"].numpy(), (len_df * len_x)) - inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = DataPreparation.normalize(inputs, - ys_array, - norm) - x_train, x_val, y_train, y_val = DataPreparation.train_val_split( - model_inputs, model_outputs, test_size=val_prop, random_state=rs - ) - trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) - trainDataLoader = DataLoader(trainData, - batch_size=BATCH_SIZE, - shuffle=True) + arg = namespace.arg From 72e5cf478cf34b5f4555e33b7f815c35c028fb23 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 15:41:48 -0500 Subject: [PATCH 06/31] updating pyproject to contain scripts --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 2bd02ae..93f9f9c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,6 +7,10 @@ authors = ["beckynevin "] readme = "README.md" license = "MIT" +[tool.poetry.scripts] +ensamble = "src.scripts.DeepEnsemble:main" +der = "src.scripts.DeepEvidentialRegression:main" + [tool.poetry.dependencies] python = ">=3.9,<3.11" jupyter = "^1.0.0" From 7c4f5e78bbb3ce1d10ac535c9d1d942247b881fa Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 15:42:09 -0500 Subject: [PATCH 07/31] adding some comments --- src/client/client.py | 30 +++++++++++++++--------------- src/utils/config.py | 6 ++++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/client/client.py b/src/client/client.py index 14f5742..e2977fa 100644 --- a/src/client/client.py +++ b/src/client/client.py @@ -4,36 +4,36 @@ from utils.config import Config from utils.defaults import Defaults -from data import DataModules -from models import ModelModules -from metrics import Metrics -from plots import Plots +from data import DataModules +#from models import ModelModules +#from metrics import Metrics +#from plots import Plots -def parser(): +def parser(): parser = ArgumentParser() parser.add_argument("--config", '-c', default=None) - # Model + # Model parser.add_argument("--model_path", '-m', default=None) - parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + # parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) - # Data + # Data parser.add_argument("--data_path", '-d', default=None) - parser.add_argument("--data_engine", '-g', default=Defaults['data']['data_engine'], choices=DataModules.keys()) - parser.add_argument("--simulator", '-s', default=None) + parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + # Common parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) # List of metrics (cannot supply specific kwargs) - parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) + # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) # List of plots - parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) + # parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) args = parser.parse_args() - if args.config is not None: + if args.config is not None: config = Config(args.config) else: @@ -42,8 +42,8 @@ def parser(): input_yaml = { "common": {"out_dir":args.out_dir}, - "model": {"model_path":args.model_path, "model_engine":args.model_engine}, - "data": {"data_path":args.data_path, "data_engine":args.data_engine, "simulator": args.simulator}, + #"model": {"model_path":args.model_path, "model_engine":args.model_engine}, + "data": {"data_path":args.data_path, "data_engine":args.data_engine}, "plots": {key: {} for key in args.plots}, "metrics": {key: {} for key in args.metrics}, } diff --git a/src/utils/config.py b/src/utils/config.py index e8dc4e8..f114741 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -15,6 +15,10 @@ def get_section(section, raise_exception=True): class Config: ENV_VAR_PATH = "DeepDiagnostics_Config" def __init__(self, config_path:Optional[str]=None) -> None: + # okay what Maggie is doing here is a little trick or "cheat" + # where the config_path is saved to the ENV_VAR_PATH + # the first time this thing is called and then later it + # can be loaded from this temp location saving on memory if config_path is not None: # Add it to the env vars in case we need to get it later. os.environ[self.ENV_VAR_PATH] = config_path @@ -39,6 +43,8 @@ def _read_config(self, path): config = yaml.safe_load(f) return config + # if raise_exception is True, then throws an error if we're missing + # otherwise, pull value from the defaults.py def get_item(self, section, item, raise_exception=True): try: return self.config[section][item] From 8bc03270cf46bc037dc3387f05732a2d7671c53d Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 15:42:48 -0500 Subject: [PATCH 08/31] adding inits --- src/client/__init__.py | 0 src/data/__init__.py | 6 ++++++ 2 files changed, 6 insertions(+) create mode 100644 src/client/__init__.py create mode 100644 src/data/__init__.py diff --git a/src/client/__init__.py b/src/client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/data/__init__.py b/src/data/__init__.py new file mode 100644 index 0000000..69a0895 --- /dev/null +++ b/src/data/__init__.py @@ -0,0 +1,6 @@ +from data.data import DataLoader, DataPreparation + +DataModules = { + "DataLoader": DataLoader, + "DataPreparation": DataPreparation +} \ No newline at end of file From 28ec922e842ef3c45cfbda51488f09e1553d406f Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 15 Apr 2024 16:01:19 -0500 Subject: [PATCH 09/31] three different defaults --- src/utils/defaults_DE.py | 37 +++++++++++++++++++++++++++++++++++++ src/utils/defaults_DER.py | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/utils/defaults_DE.py create mode 100644 src/utils/defaults_DER.py diff --git a/src/utils/defaults_DE.py b/src/utils/defaults_DE.py new file mode 100644 index 0000000..43ac06a --- /dev/null +++ b/src/utils/defaults_DE.py @@ -0,0 +1,37 @@ +Defaults = { + "common":{ + "out_dir":"./DeepDiagnosticsResources/results/", + "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", + "sim_location": "DeepDiagnosticsResources_Simulators" + }, + "model": { + "model_engine": "SBIModel" + }, + "data":{ + "data_engine": "H5Data" + }, + "plots_common": { + "axis_spines": False, + "tight_layout": True, + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels" : ['$m$','$b$'], + "parameter_colors": ['#9C92A3','#0F5257'], + "line_style_cycle": ["-", "-."], + "figure_size": [6, 6] + }, + "plots":{ + "CDFRanks":{}, + "Ranks":{"num_bins":None}, + "CoverageFraction":{} + }, + "metrics_common": { + "use_progress_bar": False, + "samples_per_inference":1000, + "percentiles":[75, 85, 95] + }, + "metrics":{ + "AllSBC":{}, + "CoverageFraction": {}, + } +} diff --git a/src/utils/defaults_DER.py b/src/utils/defaults_DER.py new file mode 100644 index 0000000..43ac06a --- /dev/null +++ b/src/utils/defaults_DER.py @@ -0,0 +1,37 @@ +Defaults = { + "common":{ + "out_dir":"./DeepDiagnosticsResources/results/", + "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", + "sim_location": "DeepDiagnosticsResources_Simulators" + }, + "model": { + "model_engine": "SBIModel" + }, + "data":{ + "data_engine": "H5Data" + }, + "plots_common": { + "axis_spines": False, + "tight_layout": True, + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels" : ['$m$','$b$'], + "parameter_colors": ['#9C92A3','#0F5257'], + "line_style_cycle": ["-", "-."], + "figure_size": [6, 6] + }, + "plots":{ + "CDFRanks":{}, + "Ranks":{"num_bins":None}, + "CoverageFraction":{} + }, + "metrics_common": { + "use_progress_bar": False, + "samples_per_inference":1000, + "percentiles":[75, 85, 95] + }, + "metrics":{ + "AllSBC":{}, + "CoverageFraction": {}, + } +} From c4a980d77425cf74c80506d4d6f6891db8b2d9f8 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Tue, 16 Apr 2024 14:43:55 -0500 Subject: [PATCH 10/31] removing all tex stuff --- Snakefile | 0 ms.pdf | Bin 227231 -> 0 bytes showyourwork.yml | 7 -- src/tex/.gitignore | 2 - src/tex/bib.bib | 37 ---------- src/tex/figures/.gitignore | 5 -- src/tex/ms.tex | 144 ------------------------------------- src/tex/output/.gitignore | 5 -- src/tex/showyourwork.sty | 13 ---- 9 files changed, 213 deletions(-) delete mode 100644 Snakefile delete mode 100644 ms.pdf delete mode 100644 showyourwork.yml delete mode 100644 src/tex/.gitignore delete mode 100644 src/tex/bib.bib delete mode 100644 src/tex/figures/.gitignore delete mode 100644 src/tex/ms.tex delete mode 100644 src/tex/output/.gitignore delete mode 100644 src/tex/showyourwork.sty diff --git a/Snakefile b/Snakefile deleted file mode 100644 index e69de29..0000000 diff --git a/ms.pdf b/ms.pdf deleted file mode 100644 index bc5add639087c74cce4f2841bd7dc3acfe69c9b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227231 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

7#du$62%4m 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

2e*EQ_1IsmSYb!c_!Ao**mYP%Jw+JY`I2=xLO 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 diff --git a/showyourwork.yml b/showyourwork.yml deleted file mode 100644 index 206454e..0000000 --- a/showyourwork.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 0.3.0 - -overleaf: - id: 62defbc43013ada57aa4c153 - push: - - src/tex/figures - - src/tex/output \ No newline at end of file diff --git a/src/tex/.gitignore b/src/tex/.gitignore deleted file mode 100644 index 841b7c7..0000000 --- a/src/tex/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Don't track TeX temporaries -*latexindent* \ No newline at end of file diff --git a/src/tex/bib.bib b/src/tex/bib.bib deleted file mode 100644 index 5ca6881..0000000 --- a/src/tex/bib.bib +++ /dev/null @@ -1,37 +0,0 @@ -@article{Hunter:2007, - Author = {Hunter, J. D.}, - Title = {Matplotlib: A 2D graphics environment}, - Journal = {Computing in Science \& Engineering}, - Volume = {9}, - Number = {3}, - Pages = {90--95}, - abstract = {Matplotlib is a 2D graphics package used for Python for - application development, interactive scripting, and publication-quality - image generation across user interfaces and operating systems.}, - publisher = {IEEE COMPUTER SOC}, - doi = {10.1109/MCSE.2007.55}, - year = 2007 - } - -@article{ harris2020array, - title = {Array programming with {NumPy}}, - author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J. - van der Walt and Ralf Gommers and Pauli Virtanen and David - Cournapeau and Eric Wieser and Julian Taylor and Sebastian - Berg and Nathaniel J. Smith and Robert Kern and Matti Picus - and Stephan Hoyer and Marten H. van Kerkwijk and Matthew - Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del - R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre - G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and - Warren Weckesser and Hameer Abbasi and Christoph Gohlke and - Travis E. Oliphant}, - year = {2020}, - month = sep, - journal = {Nature}, - volume = {585}, - number = {7825}, - pages = {357--362}, - doi = {10.1038/s41586-020-2649-2}, - publisher = {Springer Science and Business Media {LLC}}, - url = {https://doi.org/10.1038/s41586-020-2649-2} -} \ No newline at end of file diff --git a/src/tex/figures/.gitignore b/src/tex/figures/.gitignore deleted file mode 100644 index 9d0f65c..0000000 --- a/src/tex/figures/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Nothing should be tracked in this folder... -* - -# Except the gitignore file itself! -!.gitignore \ No newline at end of file diff --git a/src/tex/ms.tex b/src/tex/ms.tex deleted file mode 100644 index 93c6a58..0000000 --- a/src/tex/ms.tex +++ /dev/null @@ -1,144 +0,0 @@ - -\documentclass[twocolumn]{aastex631} - -% Import showyourwork magic -\usepackage{showyourwork} - -\usepackage[utf8]{inputenc} -\usepackage{amsmath} -\usepackage{unicode-math} - - -% Recommended, but optional, packages for figures and better typesetting: -\usepackage{microtype} -\usepackage{graphicx} -\usepackage{subfigure} -\usepackage{booktabs} % for professional tables -\usepackage{multirow} - -% hyperref makes hyperlinks in the resulting PDF. -% xurl can wrap the link if it spans a column (especially in citations). -\usepackage{hyperref} -\usepackage{xurl} - - -% This command creates a new command \editor{} that highlights any of the text in {} with a maroon color, so it can easily be spotted during internal review - -\usepackage[textsize=tiny]{todonotes} -\newcommand{\editor}[1]{{\color{purple} #1}} - -\begin{document} - -\title{DeepUQ} % Define the title itself, so it may be used in headers - -\author{Author 1 \thanks{Becky Nevin, rnevin@fnal.gov}} - - -\begin{abstract} - This project aims to create a framework for calibrating uncertainty expectations in various ML and statistical models. - It builds on DeepBench's pendulum module, controlling error injection, calculating an analytic expectation for the error impact on the final confidence intervals, and comparing this expectation to that produced by various uncertainty-aware ML and statistical techniques. - Here, we pursue the following modeling techniques: hierarchical and non-hierarchical Hamiltonian Monte Carlo sampling (\texttt{numpyro}), hierarchical and non-hierarchical simulation-based inference (\texttt{mackelab}), and deep ensembles. - We inject aleatoric error on the pendulum parameters individually ($L$, $\theta_0$, and $a_g$) at a variety of levels (1\%, 10\%, and 50\%). - We compare this to expectations of aleatoric and epistemic error from the various ML techniques and explore the bias and confidence of the models compared to our analytic expectation. -\end{abstract} - -\section{Introduction} -Cite other UQ techniques, mostly Caldeira \& Nord. - -\subsection{Error injection, (post-hoc) calibration, reliability} -Historically, aleatoric uncertainty is represented as $\epsilon$ in linear regression. -It is an additive uncertainty, not necessarily associated with a certain parameter. -This type of uncertainty can be homoskedastic or heteroskedastic. -If $\epsilon$ is a multiplicative term modifying an input parameter, the uncertainty is considered to be heteroskedastic, since it is tied to the parameter value. -In a linear regression setting, epistemic uncertainty is accounted for by the error on the $\beta$, or slope coefficient (\citealt{Nagl2022}). - -Many methods focus on creating software that will produce an uncertainty prediction. -However, a critical missed step is to calibrate this uncertainty prediction, testing its reliability against an expectation. -Several authors have investigated this, focusing on the calibration of classification problems, including Guao et al. 2017, Wegner et al. 2020, and Zhang et al. 2020. - -\begin{itemize} - \item Guo et al. 2017; this is the paper that presents temperature scaling as a method to quantify calibration of deep neural networks. - They also find that while neural networks today are more accurate than they were a decade ago, they are no longer well-calibrated, meaning that the confidence is substantially higher than accuracy. - So here, we are comparing confidence, which is a measurement of probabilities associate with the predicted labels, with the accuracy, both of which you get from the output. - So they are not propagating an error expecation to; they are instead comparing output to output. - \item Wegner et al. 2020 - \item Zhang et al. 2020. -\end{itemize} - -To read: -\begin{itemize} - \item Ghanem et al. 2017 is a handbook on UQ -\end{itemize} - -\section{Methods} -\subsection{Uncertainty definition and injection} -\subsection{Modeling techniques} -\subsubsection{HMC Sampling} -\subsubsection{SBI} -\subsubsection{DE} - -\section{Analysis} -\subsection{} - - -%\editor{Here is an quick comment that may appear, indicating an addition by an editor.} - - -%\subsubsection{Equations} - -%Large equations should be numbered and included in an equation block such that -%\begin{align} -% E=mc^2 \label{eq:1} \\ -% F=ma \label{eq:2} -%\end{align} - - -\section {Acknowledgements} - -Make sure to cite \cite{harris2020array} all of your sources \cite{Hunter:2007}. - - -You can also optionally provide contributions by person: - -\paragraph{Becky Nevin} -Author 1 contributed X Y and Z - -\paragraph{Author 2} -Author 2 contributed A B and C - -If you work with the DeepSkies research group; please include the following text: - -\emph{We acknowledge the Deep Skies Lab as a community of multi-domain experts and collaborators who’ve facilitated an environment of open discussion, idea-generation, and collaboration. This community was important for the development of this project.} - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% bibliography -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -% Style of the bib may change based on the publications requirements - -\bibliography{bib} - - - % Ending the multicol format before the appendix - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% APPENDIX -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\newpage -\appendix -\section{Appendix} - - -% Todo Example of running show your work function within the tex to produce table - -\subsection{Table References} - -% Todo: Show your work table drawing results from a function - -\end{document} \ No newline at end of file diff --git a/src/tex/output/.gitignore b/src/tex/output/.gitignore deleted file mode 100644 index 9d0f65c..0000000 --- a/src/tex/output/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Nothing should be tracked in this folder... -* - -# Except the gitignore file itself! -!.gitignore \ No newline at end of file diff --git a/src/tex/showyourwork.sty b/src/tex/showyourwork.sty deleted file mode 100644 index 8432d72..0000000 --- a/src/tex/showyourwork.sty +++ /dev/null @@ -1,13 +0,0 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{showyourwork}[2022/01/12 Open source science articles] - -\IfFileExists{./showyourwork.tex}{ - \input{showyourwork.tex} -}{ - \newcommand\GitHubURL{} - \newcommand\GitHubSHA{} - \newcommand\GitHubIcon{} - \newcommand\showyourwork{} - \newcommand\script[1]{} - \newcommand\variable[1]{} -} \ No newline at end of file From 410d11ed64dbe944f51fdb39f3c7b44108f18b25 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Tue, 16 Apr 2024 14:47:07 -0500 Subject: [PATCH 11/31] moving train.py to its own place --- src/{scripts => train}/train.py | 17 ----------------- 1 file changed, 17 deletions(-) rename src/{scripts => train}/train.py (98%) diff --git a/src/scripts/train.py b/src/train/train.py similarity index 98% rename from src/scripts/train.py rename to src/train/train.py index 1a6b2ce..885d95d 100644 --- a/src/scripts/train.py +++ b/src/train/train.py @@ -735,20 +735,3 @@ def train_DE( return model_ensemble - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("--data_source", - type=str, - help="Data used to train the model") - parser.add_argument( - "--n_epochs", - type=int, - help="Integer number of epochs to train the model" - ) - - args = parser.parse_args() - - # eventually change the bottom to train_model, - # which will contain train_DE and train_DER - train_DER(data_source=args.data_source, n_epochs=args.n_epochs) From a98d481ee8a0c74008f3c65463d55b234e43cdb0 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Tue, 16 Apr 2024 14:47:54 -0500 Subject: [PATCH 12/31] moving modules around --- src/scripts/models.py | 235 ------------------------------------------ src/scripts/paths.py | 30 ------ 2 files changed, 265 deletions(-) delete mode 100644 src/scripts/models.py delete mode 100644 src/scripts/paths.py diff --git a/src/scripts/models.py b/src/scripts/models.py deleted file mode 100644 index 73e5802..0000000 --- a/src/scripts/models.py +++ /dev/null @@ -1,235 +0,0 @@ -import numpy as np -import torch.nn as nn -import torch -import math - - -class DERLayer(nn.Module): - def __init__(self): - super().__init__() - - def forward(self, x): - gamma = x[:, 0] - nu = nn.functional.softplus(x[:, 1]) - alpha = nn.functional.softplus(x[:, 2]) + 1.0 - beta = nn.functional.softplus(x[:, 3]) - return torch.stack((gamma, nu, alpha, beta), dim=1) - - -class SDERLayer(nn.Module): - def __init__(self): - super().__init__() - - def forward(self, x): - gamma = x[:, 0] - nu = nn.functional.softplus(x[:, 1]) - alpha = nu + 1.0 - beta = nn.functional.softplus(x[:, 3]) - return torch.stack((gamma, nu, alpha, beta), dim=1) - - -def model_setup_DER(loss_type, DEVICE): - print('loss type', loss_type, type(loss_type)) - # initialize the model from scratch - if loss_type == "SDER": - Layer = SDERLayer - # initialize our loss function - lossFn = loss_sder - if loss_type == "DER": - Layer = DERLayer - # initialize our loss function - lossFn = loss_der - - # from https://github.com/pasteurlabs/unreasonable_effective_der - # /blob/main/x3_indepth.ipynb - model = torch.nn.Sequential(Model(4), Layer()) - model = model.to(DEVICE) - return model, lossFn - - -class MuVarLayer(nn.Module): - def __init__(self): - super().__init__() - - def forward(self, x): - mu = x[:, 0] - # softplus enforces positivity - var = nn.functional.softplus(x[:, 1]) - # var = x[:, 1] - return torch.stack((mu, var), dim=1) - - -def model_setup_DE(loss_type, DEVICE): - # initialize the model from scratch - if loss_type == "no_var_loss": - # model = de_no_var().to(DEVICE) - lossFn = torch.nn.MSELoss(reduction="mean") - if loss_type == "var_loss": - # model = de_var().to(DEVICE) - Layer = MuVarLayer - lossFn = torch.nn.GaussianNLLLoss(full=False, - eps=1e-06, - reduction="mean") - if loss_type == "bnll_loss": - # model = de_var().to(DEVICE) - Layer = MuVarLayer - lossFn = loss_bnll - model = torch.nn.Sequential(Model(2), Layer()) - model = model.to(DEVICE) - return model, lossFn - - -class de_no_var(nn.Module): - def __init__(self): - super().__init__() - drop_percent = 0.1 - self.ln_1 = nn.Linear(3, 100) - self.act1 = nn.ReLU() - self.drop1 = nn.Dropout(drop_percent) - self.ln_2 = nn.Linear(100, 100) - self.act2 = nn.ReLU() - self.drop2 = nn.Dropout(drop_percent) - self.ln_3 = nn.Linear(100, 100) - self.act3 = nn.ReLU() - self.drop3 = nn.Dropout(drop_percent) - self.ln_4 = nn.Linear(100, 1) - # this last dim needs to be 2 if using the GaussianNLLoss - - def forward(self, x): - x = self.drop1(self.act1(self.ln_1(x))) - x = self.drop2(self.act2(self.ln_2(x))) - x = self.drop3(self.act3(self.ln_3(x))) - x = self.ln_4(x) - return x - - -class de_var(nn.Module): - def __init__(self): - super().__init__() - drop_percent = 0.1 - self.ln_1 = nn.Linear(3, 100) - self.act1 = nn.ReLU() - self.drop1 = nn.Dropout(drop_percent) - self.ln_2 = nn.Linear(100, 100) - self.act2 = nn.ReLU() - self.drop2 = nn.Dropout(drop_percent) - self.ln_3 = nn.Linear(100, 100) - self.act3 = nn.ReLU() - self.drop3 = nn.Dropout(drop_percent) - self.ln_4 = nn.Linear(100, 2) - # this last dim needs to be 2 if using the GaussianNLLoss - - def forward(self, x): - x = self.drop1(self.act1(self.ln_1(x))) - x = self.drop2(self.act2(self.ln_2(x))) - x = self.drop3(self.act3(self.ln_3(x))) - x = self.ln_4(x) - return x - - -# This following is from PasteurLabs - -# https://github.com/pasteurlabs/unreasonable_effective_der/blob/main/models.py - - -class Model(nn.Module): - def __init__(self, n_output, n_hidden=64): - super().__init__() - self.model = nn.Sequential( - nn.Linear(3, n_hidden), - nn.ReLU(), - nn.Linear(n_hidden, n_hidden), - nn.ReLU(), - nn.Linear(n_hidden, n_output), - ) - - def forward(self, x): - return self.model(x) - - -def loss_der(y, y_pred, coeff): - gamma, nu, alpha, beta = y[:, 0], y[:, 1], y[:, 2], y[:, 3] - error = gamma - y_pred - omega = 2.0 * beta * (1.0 + nu) - - # define aleatoric and epistemic uncert - u_al = np.sqrt( - beta.detach().numpy() - * (1 + nu.detach().numpy()) - / (alpha.detach().numpy() * nu.detach().numpy()) - ) - u_ep = 1 / np.sqrt(nu.detach().numpy()) - return ( - torch.mean( - 0.5 * torch.log(math.pi / nu) - - alpha * torch.log(omega) - + (alpha + 0.5) * torch.log(error**2 * nu + omega) - + torch.lgamma(alpha) - - torch.lgamma(alpha + 0.5) - + coeff * torch.abs(error) * (2.0 * nu + alpha) - ), - u_al, - u_ep, - ) - - -def loss_sder(y, y_pred, coeff): - gamma, nu, alpha, beta = y[:, 0], y[:, 1], y[:, 2], y[:, 3] - error = gamma - y_pred - var = beta / nu - - # define aleatoric and epistemic uncert - u_al = np.sqrt( - beta.detach().numpy() - * (1 + nu.detach().numpy()) - / (alpha.detach().numpy() * nu.detach().numpy()) - ) - u_ep = 1 / np.sqrt(nu.detach().numpy()) - - return torch.mean(torch.log(var) + (1.0 + coeff * nu) * error**2 / var), \ - u_al, u_ep - - -# from martius lab -# https://github.com/martius-lab/beta-nll -# and Seitzer+2020 - - -def loss_bnll(mean, variance, target, beta): # beta=0.5): - """Compute beta-NLL loss - - :param mean: Predicted mean of shape B x D - :param variance: Predicted variance of shape B x D - :param target: Target of shape B x D - :param beta: Parameter from range [0, 1] controlling relative - weighting between data points, where `0` corresponds to - high weight on low error points and `1` to an equal weighting. - :returns: Loss per batch element of shape B - """ - loss = 0.5 * ((target - mean) ** 2 / variance + variance.log()) - if beta > 0: - loss = loss * (variance.detach() ** beta) - return loss.sum(axis=-1) - - -''' -def get_loss(transform, beta=None): - if beta: - def beta_nll_loss(targets, outputs, beta=beta): - """Compute beta-NLL loss - """ - mu = outputs[..., 0:1] - var = transform(outputs[..., 1:2]) - loss = (K.square((targets - mu)) / var + K.log(var)) - loss = loss * K.stop_gradient(var) ** beta - return loss - return beta_nll_loss - else: - def negative_log_likelihood(targets, outputs): - """Calculate the negative loglikelihood.""" - mu = outputs[..., 0:1] - var = transform(outputs[..., 1:2]) - y = targets[..., 0:1] - loglik = - K.log(var) - K.square((y - mu)) / var - return - loglik - return negative_log_likelihood -''' diff --git a/src/scripts/paths.py b/src/scripts/paths.py deleted file mode 100644 index 939c710..0000000 --- a/src/scripts/paths.py +++ /dev/null @@ -1,30 +0,0 @@ -""" -Exposes common paths useful for manipulating datasets and generating figures. - -""" -from pathlib import Path - -# Absolute path to the top level of the repository -root = Path(__file__).resolve().parents[2].absolute() - -# Absolute path to the `src` folder -src = root / "src" - -# Absolute path to the `src/data` folder (contains datasets) -data = src / "data" - -# Absolute path to the `src/static` folder (contains static images) -static = src / "static" - -# Absolute path to the `src/scripts` folder (contains figure/pipeline scripts) -scripts = src / "scripts" - -# Absolute path to the `src/tex` folder (contains the manuscript) -tex = src / "tex" - -# Absolute path to the `src/tex/figures` folder (contains figure output) -figures = tex / "figures" - -# Absolute path to the `src/tex/output` folder -# (contains other user-defined output) -output = tex / "output" From 1235f8ff4605072ad79d9086ca51a7e42e6afc38 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 17 Apr 2024 15:12:27 -0500 Subject: [PATCH 13/31] fixing imports --- src/scripts/DeepEnsemble.py | 93 ++++++++++++++++++++++++++++++------- src/train/train.py | 2 +- src/utils/config.py | 2 +- src/utils/defaults.py | 19 ++++++-- 4 files changed, 93 insertions(+), 23 deletions(-) diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index e8c679c..05ac2b2 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -1,28 +1,45 @@ +import os import argparse import numpy as np import torch from torch.utils.data import DataLoader, TensorDataset -from scripts import train, models, io +#from scripts import train, models, io +from train import train +from models import models +from utils.config import Config +from utils.defaults import Defaults +from plots import Plots -def beta_type(value): - if isinstance(value, float): - return value - elif value.lower() == "linear_decrease": - return value - elif value.lower() == "step_decrease_to_0.5": - return value - elif value.lower() == "step_decrease_to_1.0": - return value - else: - raise argparse.ArgumentTypeError( - "BETA must be a float or one of 'linear_decrease', \ - 'step_decrease_to_0.5', 'step_decrease_to_1.0'" - ) def parse_args(): parser = argparse.ArgumentParser(description="data handling module") + # there are three options with the parser: + # 1) Read from a yaml + # 2) Reads from the command line and default file + # and dumps to yaml + + # option to pass name of config + parser.add_argument("--config", '-c', default=None) + + # data info + parser.add_argument("--data_path", '-d', default=Defaults['data']['data_path'], choices=DataModules.keys()) + parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + + # model + parser.add_argument("--model_path", '-m', default=None) + parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + + # path to save the yaml if thats what you'd like + parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) + + # List of metrics (cannot supply specific kwargs) + # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) + + # List of plots + parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) + parser.add_argument( "--size_df", type=float, @@ -164,7 +181,51 @@ def parse_args(): default=False, help="verbose option for train", ) - return parser.parse_args() + #return parser.parse_args() + + args = parser.parse_args() + if args.config is not None: + config = Config(args.config) + + else: + temp_config = Defaults['common']['temp_config'] + os.makedirs(os.path.dirname(temp_config), exist_ok=True) + + input_yaml = { + "common": {"out_dir": args.out_dir}, + #"model": {"model_path":args.model_path, "model_engine":args.model_engine}, + "data": {"data_path": args.data_path, + "data_engine": args.data_engine, + "size_df": args.size_df, + "noise_level": args.noise_level, + "val_proportion": args.val_proportion, + "randomseed": args.randomseed, + "batchsize": args.batchsize}, + "plots": {key: {} for key in args.plots}, + "metrics": {key: {} for key in args.metrics}, + } + + yaml.dump(input_yaml, open(temp_config, "w")) + config = Config(temp_config) + + return config + #return parser.parse_args() + + +def beta_type(value): + if isinstance(value, float): + return value + elif value.lower() == "linear_decrease": + return value + elif value.lower() == "step_decrease_to_0.5": + return value + elif value.lower() == "step_decrease_to_1.0": + return value + else: + raise argparse.ArgumentTypeError( + "BETA must be a float or one of 'linear_decrease', \ + 'step_decrease_to_0.5', 'step_decrease_to_1.0'" + ) if __name__ == "__main__": diff --git a/src/train/train.py b/src/train/train.py index 885d95d..ee57651 100644 --- a/src/train/train.py +++ b/src/train/train.py @@ -4,7 +4,7 @@ import glob import numpy as np import matplotlib.pyplot as plt -from scripts import models +from models import models def train_DER( diff --git a/src/utils/config.py b/src/utils/config.py index f114741..106fcaa 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -13,7 +13,7 @@ def get_section(section, raise_exception=True): class Config: - ENV_VAR_PATH = "DeepDiagnostics_Config" + ENV_VAR_PATH = "DeepUQ_Config" def __init__(self, config_path:Optional[str]=None) -> None: # okay what Maggie is doing here is a little trick or "cheat" # where the config_path is saved to the ENV_VAR_PATH diff --git a/src/utils/defaults.py b/src/utils/defaults.py index 43ac06a..8548e03 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -3,12 +3,21 @@ "out_dir":"./DeepDiagnosticsResources/results/", "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", "sim_location": "DeepDiagnosticsResources_Simulators" - }, + }, + "data": { + "data_path": "./data/", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + }, "model": { - "model_engine": "SBIModel" - }, - "data":{ - "data_engine": "H5Data" + "model_path": "./models/", + # the engines are the classes, defined + "model_engine": "DE", + "n_models": 100, }, "plots_common": { "axis_spines": False, From 59e7179fa77abe22f6b9fcd433a8a3596d05e93d Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 17 Apr 2024 15:48:52 -0500 Subject: [PATCH 14/31] DE runs all the way through from a default for the data part, next to do is the model part --- src/data/__init__.py | 4 ++-- src/data/data.py | 4 +++- src/scripts/DeepEnsemble.py | 39 +++++++++++++++++++++++++------------ src/utils/defaults.py | 2 ++ 4 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/data/__init__.py b/src/data/__init__.py index 69a0895..b68f4a2 100644 --- a/src/data/__init__.py +++ b/src/data/__init__.py @@ -1,6 +1,6 @@ -from data.data import DataLoader, DataPreparation +from data.data import MyDataLoader, DataPreparation DataModules = { - "DataLoader": DataLoader, + "MyDataLoader": MyDataLoader, "DataPreparation": DataPreparation } \ No newline at end of file diff --git a/src/data/data.py b/src/data/data.py index cdb5341..00874fd 100644 --- a/src/data/data.py +++ b/src/data/data.py @@ -65,7 +65,9 @@ def parse_args(): return parser.parse_args() -class DataLoader: +class MyDataLoader: + def __init__(self): + self.data = None def save_data_pkl(self, data_name, data, path="../data/"): """ Save and load the pkl'ed training/test set diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index 05ac2b2..ca6a769 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -1,14 +1,18 @@ import os +import yaml import argparse import numpy as np import torch -from torch.utils.data import DataLoader, TensorDataset +from torch.utils.data import TensorDataset, DataLoader #from scripts import train, models, io from train import train from models import models +from data import DataModules +from models import ModelModules from utils.config import Config from utils.defaults import Defaults -from plots import Plots +from data.data import DataPreparation, MyDataLoader +#from plots import Plots @@ -38,7 +42,7 @@ def parse_args(): # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) # List of plots - parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) + #parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) parser.add_argument( "--size_df", @@ -201,8 +205,8 @@ def parse_args(): "val_proportion": args.val_proportion, "randomseed": args.randomseed, "batchsize": args.batchsize}, - "plots": {key: {} for key in args.plots}, - "metrics": {key: {} for key in args.metrics}, + #"plots": {key: {} for key in args.plots}, + #"metrics": {key: {} for key in args.metrics}, } yaml.dump(input_yaml, open(temp_config, "w")) @@ -229,17 +233,28 @@ def beta_type(value): if __name__ == "__main__": - namespace = parse_args() + #namespace = parse_args() + #print('ns', namespace) + config = parse_args() + ''' size_df = namespace.size_df noise = namespace.noise_level norm = namespace.normalize val_prop = namespace.val_proportion rs = namespace.randomseed BATCH_SIZE = namespace.batchsize - sigma = io.DataPreparation.get_sigma(noise) - if namespace.generatedata: + ''' + size_df = config.get_item("data", "size_df") + noise = config.get_item("data", "noise_level") + norm = config.get_item("data", "normalize", raise_exception=False) + val_prop = config.get_item("data", "val_proportion") + rs = config.get_item("data", "randomseed") + BATCH_SIZE = config.get_item("data", "batchsize") + sigma = DataPreparation.get_sigma(noise) + print("generated data", config.get_item("data", "generatedata", raise_exception=False)) + if config.get_item("data", "generatedata", raise_exception=False): # generate the df - data = io.DataPreparation() + data = DataPreparation() data.sample_params_from_prior(size_df) data.simulate_data(data.params, sigma, "linear_homogeneous") df_array = data.get_dict() @@ -254,7 +269,7 @@ def beta_type(value): # Convert lists to tensors df[key] = torch.tensor(value) else: - loader = io.DataLoader() + loader = MyDataLoader() df = loader.load_data_h5( "linear_sigma_" + str(sigma) + "_size_" + str(size_df), path="/Users/rnevin/Documents/DeepUQ/data/", @@ -267,10 +282,10 @@ def beta_type(value): ys_array = np.reshape(df["output"].numpy(), (len_df * len_x)) inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = io.DataPreparation.normalize(inputs, + model_inputs, model_outputs = DataPreparation.normalize(inputs, ys_array, norm) - x_train, x_val, y_train, y_val = io.DataPreparation.train_val_split( + x_train, x_val, y_train, y_val = DataPreparation.train_val_split( model_inputs, model_outputs, val_proportion=val_prop, random_state=rs ) trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) diff --git a/src/utils/defaults.py b/src/utils/defaults.py index 8548e03..4bba868 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -9,9 +9,11 @@ "data_engine": "DataLoader", "size_df": 1000, "noise_level": "low", + "normalize": False, "val_proportion": 0.1, "randomseed": 42, "batchsize": 100, + "generatedata": False, }, "model": { "model_path": "./models/", From 046cda9bca71d68d476d3896393d08bb440ee68c Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 17 Apr 2024 17:18:23 -0500 Subject: [PATCH 15/31] running DE from command line dumping into config :) --- src/models/models.py | 246 +++++++++++++++++++++++++++++++++--- src/scripts/DeepEnsemble.py | 54 +++++--- src/utils/defaults.py | 11 +- 3 files changed, 274 insertions(+), 37 deletions(-) diff --git a/src/models/models.py b/src/models/models.py index 6498958..a21f1a9 100644 --- a/src/models/models.py +++ b/src/models/models.py @@ -8,18 +8,7 @@ from torch.utils.data import TensorDataset import torch import h5py - - -def parse_args(): - parser = argparse.ArgumentParser(description="data handling module") - parser.add_argument( - "--arg", - type=float, - required=False, - default=100, - help="Description", - ) - return parser.parse_args() +import torch.nn as nn class ModelLoader: @@ -58,7 +47,232 @@ def predict(input, model): return 0 -# Example usage: -if __name__ == "__main__": - namespace = parse_args() - arg = namespace.arg +class DERLayer(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x): + gamma = x[:, 0] + nu = nn.functional.softplus(x[:, 1]) + alpha = nn.functional.softplus(x[:, 2]) + 1.0 + beta = nn.functional.softplus(x[:, 3]) + return torch.stack((gamma, nu, alpha, beta), dim=1) + + +class SDERLayer(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x): + gamma = x[:, 0] + nu = nn.functional.softplus(x[:, 1]) + alpha = nu + 1.0 + beta = nn.functional.softplus(x[:, 3]) + return torch.stack((gamma, nu, alpha, beta), dim=1) + + +def model_setup_DER(loss_type, DEVICE): + print('loss type', loss_type, type(loss_type)) + # initialize the model from scratch + if loss_type == "SDER": + Layer = SDERLayer + # initialize our loss function + lossFn = loss_sder + if loss_type == "DER": + Layer = DERLayer + # initialize our loss function + lossFn = loss_der + + # from https://github.com/pasteurlabs/unreasonable_effective_der + # /blob/main/x3_indepth.ipynb + model = torch.nn.Sequential(Model(4), Layer()) + model = model.to(DEVICE) + return model, lossFn + + +class MuVarLayer(nn.Module): + def __init__(self): + super().__init__() + + def forward(self, x): + mu = x[:, 0] + # softplus enforces positivity + var = nn.functional.softplus(x[:, 1]) + # var = x[:, 1] + return torch.stack((mu, var), dim=1) + + +def model_setup_DE(loss_type, DEVICE): + # initialize the model from scratch + if loss_type == "no_var_loss": + # model = de_no_var().to(DEVICE) + lossFn = torch.nn.MSELoss(reduction="mean") + if loss_type == "var_loss": + # model = de_var().to(DEVICE) + Layer = MuVarLayer + lossFn = torch.nn.GaussianNLLLoss(full=False, + eps=1e-06, + reduction="mean") + if loss_type == "bnll_loss": + # model = de_var().to(DEVICE) + Layer = MuVarLayer + lossFn = loss_bnll + model = torch.nn.Sequential(Model(2), Layer()) + model = model.to(DEVICE) + return model, lossFn + + +class de_no_var(nn.Module): + def __init__(self): + super().__init__() + drop_percent = 0.1 + self.ln_1 = nn.Linear(3, 100) + self.act1 = nn.ReLU() + self.drop1 = nn.Dropout(drop_percent) + self.ln_2 = nn.Linear(100, 100) + self.act2 = nn.ReLU() + self.drop2 = nn.Dropout(drop_percent) + self.ln_3 = nn.Linear(100, 100) + self.act3 = nn.ReLU() + self.drop3 = nn.Dropout(drop_percent) + self.ln_4 = nn.Linear(100, 1) + # this last dim needs to be 2 if using the GaussianNLLoss + + def forward(self, x): + x = self.drop1(self.act1(self.ln_1(x))) + x = self.drop2(self.act2(self.ln_2(x))) + x = self.drop3(self.act3(self.ln_3(x))) + x = self.ln_4(x) + return x + + +class de_var(nn.Module): + def __init__(self): + super().__init__() + drop_percent = 0.1 + self.ln_1 = nn.Linear(3, 100) + self.act1 = nn.ReLU() + self.drop1 = nn.Dropout(drop_percent) + self.ln_2 = nn.Linear(100, 100) + self.act2 = nn.ReLU() + self.drop2 = nn.Dropout(drop_percent) + self.ln_3 = nn.Linear(100, 100) + self.act3 = nn.ReLU() + self.drop3 = nn.Dropout(drop_percent) + self.ln_4 = nn.Linear(100, 2) + # this last dim needs to be 2 if using the GaussianNLLoss + + def forward(self, x): + x = self.drop1(self.act1(self.ln_1(x))) + x = self.drop2(self.act2(self.ln_2(x))) + x = self.drop3(self.act3(self.ln_3(x))) + x = self.ln_4(x) + return x + + +# This following is from PasteurLabs - +# https://github.com/pasteurlabs/unreasonable_effective_der/blob/main/models.py + + +class Model(nn.Module): + def __init__(self, n_output, n_hidden=64): + super().__init__() + self.model = nn.Sequential( + nn.Linear(3, n_hidden), + nn.ReLU(), + nn.Linear(n_hidden, n_hidden), + nn.ReLU(), + nn.Linear(n_hidden, n_output), + ) + + def forward(self, x): + return self.model(x) + + +def loss_der(y, y_pred, coeff): + gamma, nu, alpha, beta = y[:, 0], y[:, 1], y[:, 2], y[:, 3] + error = gamma - y_pred + omega = 2.0 * beta * (1.0 + nu) + + # define aleatoric and epistemic uncert + u_al = np.sqrt( + beta.detach().numpy() + * (1 + nu.detach().numpy()) + / (alpha.detach().numpy() * nu.detach().numpy()) + ) + u_ep = 1 / np.sqrt(nu.detach().numpy()) + return ( + torch.mean( + 0.5 * torch.log(math.pi / nu) + - alpha * torch.log(omega) + + (alpha + 0.5) * torch.log(error**2 * nu + omega) + + torch.lgamma(alpha) + - torch.lgamma(alpha + 0.5) + + coeff * torch.abs(error) * (2.0 * nu + alpha) + ), + u_al, + u_ep, + ) + + +def loss_sder(y, y_pred, coeff): + gamma, nu, alpha, beta = y[:, 0], y[:, 1], y[:, 2], y[:, 3] + error = gamma - y_pred + var = beta / nu + + # define aleatoric and epistemic uncert + u_al = np.sqrt( + beta.detach().numpy() + * (1 + nu.detach().numpy()) + / (alpha.detach().numpy() * nu.detach().numpy()) + ) + u_ep = 1 / np.sqrt(nu.detach().numpy()) + + return torch.mean(torch.log(var) + (1.0 + coeff * nu) * error**2 / var), \ + u_al, u_ep + + +# from martius lab +# https://github.com/martius-lab/beta-nll +# and Seitzer+2020 + + +def loss_bnll(mean, variance, target, beta): # beta=0.5): + """Compute beta-NLL loss + + :param mean: Predicted mean of shape B x D + :param variance: Predicted variance of shape B x D + :param target: Target of shape B x D + :param beta: Parameter from range [0, 1] controlling relative + weighting between data points, where `0` corresponds to + high weight on low error points and `1` to an equal weighting. + :returns: Loss per batch element of shape B + """ + loss = 0.5 * ((target - mean) ** 2 / variance + variance.log()) + if beta > 0: + loss = loss * (variance.detach() ** beta) + return loss.sum(axis=-1) + + +''' +def get_loss(transform, beta=None): + if beta: + def beta_nll_loss(targets, outputs, beta=beta): + """Compute beta-NLL loss + """ + mu = outputs[..., 0:1] + var = transform(outputs[..., 1:2]) + loss = (K.square((targets - mu)) / var + K.log(var)) + loss = loss * K.stop_gradient(var) ** beta + return loss + return beta_nll_loss + else: + def negative_log_likelihood(targets, outputs): + """Calculate the negative loglikelihood.""" + mu = outputs[..., 0:1] + var = transform(outputs[..., 1:2]) + y = targets[..., 0:1] + loglik = - K.log(var) - K.square((y - mu)) / var + return - loglik + return negative_log_likelihood +''' \ No newline at end of file diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index ca6a769..fdaff7b 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -196,15 +196,32 @@ def parse_args(): os.makedirs(os.path.dirname(temp_config), exist_ok=True) input_yaml = { - "common": {"out_dir": args.out_dir}, - #"model": {"model_path":args.model_path, "model_engine":args.model_engine}, + "common": {"out_dir": args.out_dir}, + "model": {"model_path": args.model_path, + "model_engine": args.model_engine, + "model_type": args.model_type, + "loss_type": args.loss_type, + "n_models": args.n_models, + "init_lr": args.init_lr, + "wd": args.wd, + "BETA": args.BETA, + "n_epochs": args.n_epochs, + "path_to_models": args.path_to_models, + "save_all_checkpoints": args.save_all_checkpoints, + "save_final_checkpoint": args.save_final_checkpoint, + "overwrite_final_checkpoint": args.overwrite_final_checkpoint, + "plot": args.plot, + "savefig": args.savefig, + "verbose": args.verbose, + }, "data": {"data_path": args.data_path, "data_engine": args.data_engine, "size_df": args.size_df, "noise_level": args.noise_level, "val_proportion": args.val_proportion, "randomseed": args.randomseed, - "batchsize": args.batchsize}, + "batchsize": args.batchsize, + }, #"plots": {key: {} for key in args.plots}, #"metrics": {key: {} for key in args.metrics}, } @@ -296,25 +313,26 @@ def beta_type(value): # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - model_name = namespace.model_type + "_noise_" + noise - model, lossFn = models.model_setup_DE(namespace.loss_type, DEVICE) + model_name = config.get_item("model", "model_type") + "_noise_" + noise + model, lossFn = models.model_setup_DE(config.get_item("model", "loss_type"), DEVICE) model_ensemble = train.train_DE( trainDataLoader, x_val, y_val, - namespace.init_lr, + config.get_item("model", "init_lr"), DEVICE, - namespace.loss_type, - namespace.n_models, - namespace.wd, + config.get_item("model", "loss_type"), + config.get_item("model", "n_models"), + config.get_item("model", "wd"), model_name, - BETA=namespace.BETA, - EPOCHS=namespace.n_epochs, - path_to_model=namespace.path_to_models, - save_all_checkpoints=namespace.save_all_checkpoints, - save_final_checkpoint=namespace.save_final_checkpoint, - overwrite_final_checkpoint=namespace.overwrite_final_checkpoint, - plot=namespace.plot, - savefig=namespace.savefig, - verbose=namespace.verbose, + BETA=config.get_item("model", "BETA"), + EPOCHS=config.get_item("model", "n_epochs"), + path_to_model=config.get_item("model", "path_to_models"), + save_all_checkpoints=config.get_item("model", "save_all_checkpoints"), + save_final_checkpoint=config.get_item("model", "save_final_checkpoint"), + overwrite_final_checkpoint=config.get_item("model", + "overwrite_final_checkpoint"), + plot=config.get_item("model", "plot"), + savefig=config.get_item("model", "savefig"), + verbose=config.get_item("model", "verbose"), ) diff --git a/src/utils/defaults.py b/src/utils/defaults.py index 4bba868..920fcd4 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -1,8 +1,7 @@ Defaults = { "common":{ - "out_dir":"./DeepDiagnosticsResources/results/", - "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", - "sim_location": "DeepDiagnosticsResources_Simulators" + "out_dir":"./DeepUQResources/results/", + "temp_config": "./DeepUQResources/temp/temp_config.yml", }, "data": { "data_path": "./data/", @@ -19,7 +18,13 @@ "model_path": "./models/", # the engines are the classes, defined "model_engine": "DE", + "model_type": "DE", + "loss_type": "bnll", "n_models": 100, + "init_lr": 0.001, + "wd": "./", + "BETA": 0.5, + "n_epochs": 100, }, "plots_common": { "axis_spines": False, From 249317a10c8fed6e1da8fe64b2826bf6cbf8479e Mon Sep 17 00:00:00 2001 From: beckynevin Date: Thu, 18 Apr 2024 11:12:55 -0500 Subject: [PATCH 16/31] rm-ing static and client --- src/client/__init__.py | 0 src/client/client.py | 79 ------------------------------------------ src/static/.gitignore | 2 -- 3 files changed, 81 deletions(-) delete mode 100644 src/client/__init__.py delete mode 100644 src/client/client.py delete mode 100644 src/static/.gitignore diff --git a/src/client/__init__.py b/src/client/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/client/client.py b/src/client/client.py deleted file mode 100644 index e2977fa..0000000 --- a/src/client/client.py +++ /dev/null @@ -1,79 +0,0 @@ -import os -import yaml -from argparse import ArgumentParser - -from utils.config import Config -from utils.defaults import Defaults -from data import DataModules -#from models import ModelModules -#from metrics import Metrics -#from plots import Plots - - -def parser(): - parser = ArgumentParser() - parser.add_argument("--config", '-c', default=None) - - # Model - parser.add_argument("--model_path", '-m', default=None) - # parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) - - # Data - parser.add_argument("--data_path", '-d', default=None) - parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) - - # Common - parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) - - # List of metrics (cannot supply specific kwargs) - # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) - - # List of plots - # parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) - - - args = parser.parse_args() - if args.config is not None: - config = Config(args.config) - - else: - temp_config = Defaults['common']['temp_config'] - os.makedirs(os.path.dirname(temp_config), exist_ok=True) - - input_yaml = { - "common": {"out_dir":args.out_dir}, - #"model": {"model_path":args.model_path, "model_engine":args.model_engine}, - "data": {"data_path":args.data_path, "data_engine":args.data_engine}, - "plots": {key: {} for key in args.plots}, - "metrics": {key: {} for key in args.metrics}, - } - - yaml.dump(input_yaml, open(temp_config, "w")) - config = Config(temp_config) - - return config - -def main(): - config = parser() - - model_path = config.get_item("model", "model_path") - model_engine = config.get_item("model", "model_engine", raise_exception=False) - model = ModelModules[model_engine](model_path) - - data_path = config.get_item("data", "data_path") - data_engine = config.get_item("data", "data_engine", raise_exception=False) - simulator_name = config.get_item("data", "simulator") - data = DataModules[data_engine](data_path, simulator_name) - - out_dir = config.get_item("common", "out_dir", raise_exception=False) - if not os.path.exists(os.path.dirname(out_dir)): - os.makedirs(os.path.dirname(out_dir)) - - metrics = config.get_section("metrics", raise_exception=False) - plots = config.get_section("plots", raise_exception=False) - - for metrics_name, metrics_args in metrics.items(): - Metrics[metrics_name](model, data, **metrics_args)() - - for plot_name, plot_args in plots.items(): - Plots[plot_name](model, data, save=True, show=False, out_dir=out_dir)(**plot_args) diff --git a/src/static/.gitignore b/src/static/.gitignore deleted file mode 100644 index e167a34..0000000 --- a/src/static/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Anything is game in this folder -!* From cfe2680758ae89df79d9e9baff606090ad9607b8 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Thu, 18 Apr 2024 11:14:40 -0500 Subject: [PATCH 17/31] black and flake8 for data.py --- src/data/data.py | 92 ++---------------------------------------------- 1 file changed, 2 insertions(+), 90 deletions(-) diff --git a/src/data/data.py b/src/data/data.py index 00874fd..b5f32fd 100644 --- a/src/data/data.py +++ b/src/data/data.py @@ -1,73 +1,17 @@ # Contains modules used to prepare a dataset # with varying noise properties -import argparse import numpy as np from sklearn.model_selection import train_test_split import pickle from torch.distributions import Uniform -from torch.utils.data import TensorDataset import torch import h5py -def parse_args(): - parser = argparse.ArgumentParser(description="data handling module") - parser.add_argument( - "size_df", - type=float, - required=False, - default=1000, - help="Used to load the associated .h5 data file", - ) - parser.add_argument( - "noise_level", - type=str, - required=False, - default="low", - help="low, medium, high or vhigh, \ - used to look up associated sigma value", - ) - parser.add_argument( - "size_df", - type=str, - nargs="?", - default="/repo/embargo", - help="Butler Repository path from which data is transferred. \ - Input str. Default = '/repo/embargo'", - ) - parser.add_argument( - "--normalize", - required=False, - action="store_true", - help="If true theres an option to normalize the dataset", - ) - parser.add_argument( - "--val_proportion", - type=float, - required=False, - default=0.1, - help="Proportion of the dataset to use as validation", - ) - parser.add_argument( - "--randomseed", - type=float, - required=False, - default=42, - help="Random seed used for shuffling the training and validation set", - ) - parser.add_argument( - "--batchsize", - type=float, - required=False, - default=100, - help="Size of batched used in the traindataloader", - ) - return parser.parse_args() - - class MyDataLoader: def __init__(self): self.data = None + def save_data_pkl(self, data_name, data, path="../data/"): """ Save and load the pkl'ed training/test set @@ -163,7 +107,7 @@ def simulate_data( sigma, simulation_name, x=np.linspace(0, 100, 101), - seed=13 + seed=42 ): if simulation_name == "linear_homogeneous": # convert to numpy array (if tensor): @@ -266,35 +210,3 @@ def train_val_split( random_state=random_state, ) return x_train, x_val, y_train, y_val - - -# Example usage: -if __name__ == "__main__": - namespace = parse_args() - size_df = namespace.size_df - noise = namespace.noise_level - norm = namespace.normalize - val_prop = namespace.val_proportion - rs = namespace.randomseed - BATCH_SIZE = namespace.batchsize - sigma = DataPreparation.get_sigma(noise) - loader = DataLoader() - data = loader.load_data_h5("linear_sigma_" + str(sigma) + - "_size_" + str(size_df)) - len_df = len(data["params"][:, 0].numpy()) - len_x = len(data["inputs"].numpy()) - ms_array = np.repeat(data["params"][:, 0].numpy(), len_x) - bs_array = np.repeat(data["params"][:, 1].numpy(), len_x) - xs_array = np.tile(data["inputs"].numpy(), len_df) - ys_array = np.reshape(data["output"].numpy(), (len_df * len_x)) - inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = DataPreparation.normalize(inputs, - ys_array, - norm) - x_train, x_val, y_train, y_val = DataPreparation.train_val_split( - model_inputs, model_outputs, test_size=val_prop, random_state=rs - ) - trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) - trainDataLoader = DataLoader(trainData, - batch_size=BATCH_SIZE, - shuffle=True) From 140a49e96cd028c6745869477f8a2e2f275ef83b Mon Sep 17 00:00:00 2001 From: beckynevin Date: Fri, 19 Apr 2024 11:44:17 -0500 Subject: [PATCH 18/31] DER tests work for cli --- src/models/models.py | 3 +- src/scripts/DeepEnsemble.py | 10 -- src/scripts/DeepEvidentialRegression.py | 188 ++++++++++++++++-------- test/test_DeepEnsemble.py | 48 ------ test/test_DeepEvidentialRegression.py | 76 ++++++++++ 5 files changed, 200 insertions(+), 125 deletions(-) create mode 100644 test/test_DeepEvidentialRegression.py diff --git a/src/models/models.py b/src/models/models.py index a21f1a9..4b747f0 100644 --- a/src/models/models.py +++ b/src/models/models.py @@ -1,14 +1,13 @@ # Contains modules used to prepare a dataset # with varying noise properties -import argparse import numpy as np from sklearn.model_selection import train_test_split import pickle from torch.distributions import Uniform from torch.utils.data import TensorDataset import torch -import h5py import torch.nn as nn +import math class ModelLoader: diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index fdaff7b..48b4702 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -250,17 +250,7 @@ def beta_type(value): if __name__ == "__main__": - #namespace = parse_args() - #print('ns', namespace) config = parse_args() - ''' - size_df = namespace.size_df - noise = namespace.noise_level - norm = namespace.normalize - val_prop = namespace.val_proportion - rs = namespace.randomseed - BATCH_SIZE = namespace.batchsize - ''' size_df = config.get_item("data", "size_df") noise = config.get_item("data", "noise_level") norm = config.get_item("data", "normalize", raise_exception=False) diff --git a/src/scripts/DeepEvidentialRegression.py b/src/scripts/DeepEvidentialRegression.py index 3616f67..28f7bf2 100644 --- a/src/scripts/DeepEvidentialRegression.py +++ b/src/scripts/DeepEvidentialRegression.py @@ -1,12 +1,47 @@ +import os +import yaml import argparse import numpy as np import torch -from torch.utils.data import DataLoader, TensorDataset -from scripts import train, models, io +from torch.utils.data import TensorDataset, DataLoader +#from scripts import train, models, io +from train import train +from models import models +from data import DataModules +from models import ModelModules +from utils.config import Config +from utils.defaults import Defaults +from data.data import DataPreparation, MyDataLoader +#from plots import Plots def parse_args(): parser = argparse.ArgumentParser(description="data handling module") + # there are three options with the parser: + # 1) Read from a yaml + # 2) Reads from the command line and default file + # and dumps to yaml + + # option to pass name of config + parser.add_argument("--config", '-c', default=None) + + # data info + parser.add_argument("--data_path", '-d', default=Defaults['data']['data_path'], choices=DataModules.keys()) + parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + + # model + parser.add_argument("--model_path", '-m', default=None) + parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + + # path to save the yaml if thats what you'd like + parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) + + # List of metrics (cannot supply specific kwargs) + # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) + + # List of plots + #parser.add_argument("--plots", nargs='+', default=list(Defaults['plots'].keys()), choices=Plots.keys()) + parser.add_argument( "--size_df", type=float, @@ -55,7 +90,6 @@ def parse_args(): default=100, help="Size of batched used in the traindataloader", ) - # now args for model parser.add_argument( "--init_lr", type=float, @@ -64,21 +98,18 @@ def parse_args(): help="Learning rate", ) parser.add_argument( - "--coeff", - type=float, + "--loss_type", + type=str, required=False, - default=0.5, - help="Coeff, see DER lit", + default="DER", + help="Loss types for DER", ) parser.add_argument( - "--loss_type", - type=str, + "--COEFF", + type=float, required=False, - default="SDER", - help="Loss types. \ - For MVE, options are no_var_loss, var_loss, \ - and bnn_loss. \ - For DER, options are DER or SDER", + default=0.5, + help="Coefficient for DER", ) parser.add_argument( "wd", @@ -89,7 +120,7 @@ def parse_args(): "--model_type", type=str, required=False, - default="DER", + default="DE", help="Beginning of name for saved checkpoints and figures", ) parser.add_argument( @@ -142,21 +173,66 @@ def parse_args(): default=False, help="verbose option for train", ) - return parser.parse_args() + #return parser.parse_args() + + args = parser.parse_args() + if args.config is not None: + config = Config(args.config) + + else: + temp_config = Defaults['common']['temp_config'] + os.makedirs(os.path.dirname(temp_config), exist_ok=True) + + input_yaml = { + "common": {"out_dir": args.out_dir}, + "model": {"model_path": args.model_path, + "model_engine": args.model_engine, + "model_type": args.model_type, + "loss_type": args.loss_type, + "init_lr": args.init_lr, + "wd": args.wd, + "coeff": args.COEFF, + "n_epochs": args.n_epochs, + "path_to_models": args.path_to_models, + "save_all_checkpoints": args.save_all_checkpoints, + "save_final_checkpoint": args.save_final_checkpoint, + "overwrite_final_checkpoint": args.overwrite_final_checkpoint, + "plot": args.plot, + "savefig": args.savefig, + "verbose": args.verbose, + }, + "data": {"data_path": args.data_path, + "data_engine": args.data_engine, + "size_df": args.size_df, + "noise_level": args.noise_level, + "val_proportion": args.val_proportion, + "randomseed": args.randomseed, + "batchsize": args.batchsize, + }, + #"plots": {key: {} for key in args.plots}, + #"metrics": {key: {} for key in args.metrics}, + } + + yaml.dump(input_yaml, open(temp_config, "w")) + config = Config(temp_config) + + return config + #return parser.parse_args() if __name__ == "__main__": - namespace = parse_args() - size_df = namespace.size_df - noise = namespace.noise_level - norm = namespace.normalize - val_prop = namespace.val_proportion - rs = namespace.randomseed - BATCH_SIZE = namespace.batchsize - sigma = io.DataPreparation.get_sigma(noise) - if namespace.generatedata: + config = parse_args() + size_df = config.get_item("data", "size_df") + noise = config.get_item("data", "noise_level") + norm = config.get_item("data", "normalize", raise_exception=False) + val_prop = config.get_item("data", "val_proportion") + rs = config.get_item("data", "randomseed") + BATCH_SIZE = config.get_item("data", "batchsize") + sigma = DataPreparation.get_sigma(noise) + print("generated data", config.get_item("data", "generatedata", raise_exception=False)) + if config.get_item("data", "generatedata", raise_exception=False): # generate the df - data = io.DataPreparation() + data = DataPreparation() data.sample_params_from_prior(size_df) data.simulate_data(data.params, sigma, "linear_homogeneous") df_array = data.get_dict() @@ -171,12 +247,11 @@ def parse_args(): # Convert lists to tensors df[key] = torch.tensor(value) else: - loader = io.DataLoader() + loader = MyDataLoader() df = loader.load_data_h5( "linear_sigma_" + str(sigma) + "_size_" + str(size_df), path="/Users/rnevin/Documents/DeepUQ/data/", ) - print('df', df) len_df = len(df["params"][:, 0].numpy()) len_x = len(df["inputs"].numpy()) ms_array = np.repeat(df["params"][:, 0].numpy(), len_x) @@ -184,10 +259,10 @@ def parse_args(): xs_array = np.tile(df["inputs"].numpy(), len_df) ys_array = np.reshape(df["output"].numpy(), (len_df * len_x)) inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = io.DataPreparation.normalize(inputs, + model_inputs, model_outputs = DataPreparation.normalize(inputs, ys_array, norm) - x_train, x_val, y_train, y_val = io.DataPreparation.train_val_split( + x_train, x_val, y_train, y_val = DataPreparation.train_val_split( model_inputs, model_outputs, val_proportion=val_prop, random_state=rs ) trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) @@ -197,44 +272,27 @@ def parse_args(): print("[INFO] initializing the gal model...") # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - - model_name = namespace.model_type + "_noise_" + noise - model, lossFn = models.model_setup_DER(namespace.loss_type, DEVICE) + model_name = config.get_item("model", "model_type") + "_noise_" + noise + model, lossFn = models.model_setup_DER(config.get_item("model", "loss_type"), DEVICE) model_ensemble = train.train_DER( trainDataLoader, x_val, y_val, - namespace.init_lr, + config.get_item("model", "init_lr"), DEVICE, - namespace.coeff, - namespace.loss_type, - namespace.wd, + config.get_item("model", "coeff"), + config.get_item("model", "loss_type"), + config.get_item("model", "wd"), model_name, - EPOCHS=namespace.n_epochs, - path_to_model=namespace.path_to_models, - save_all_checkpoints=namespace.save_all_checkpoints, - save_final_checkpoint=namespace.save_final_checkpoint, - overwrite_final_checkpoint=namespace.overwrite_final_checkpoint, - plot=namespace.plot, - savefig=namespace.savefig, - verbose=namespace.verbose, - ) - ''' - trainDataLoader, - x_val, - y_val, - INIT_LR, - DEVICE, - COEFF, - loss_type, - wd, - model_name="DER", - EPOCHS=100, - path_to_model="models/", - save_all_checkpoints=False, - save_final_checkpoint=False, - overwrite_final_checkpoint=False, - plot=True, - savefig=True, - verbose=True - ''' + EPOCHS=config.get_item("model", "n_epochs"), + path_to_model=config.get_item("model", "path_to_models"), + save_all_checkpoints=config.get_item("model", "save_all_checkpoints"), + save_final_checkpoint=config.get_item("model", "save_final_checkpoint"), + overwrite_final_checkpoint=config.get_item("model", + "overwrite_final_checkpoint"), + plot=config.get_item("model", "plot"), + savefig=config.get_item("model", "savefig"), + verbose=config.get_item("model", "verbose"), + ) + + diff --git a/test/test_DeepEnsemble.py b/test/test_DeepEnsemble.py index 2334cb8..dbbaf57 100644 --- a/test/test_DeepEnsemble.py +++ b/test/test_DeepEnsemble.py @@ -28,54 +28,6 @@ def temp_directory(): shutil.rmtree(temp_dir) -def test_DER_chkpt_saved(temp_directory): - noise_level = "low" - wd = str(temp_directory) + "/" - n_epochs = 2 - subprocess_args = [ - "python", - "src/scripts/DeepEvidentialRegression.py", - noise_level, - wd, - "--n_epochs", - str(n_epochs), - "--save_final_checkpoint", - "--savefig", - "--generatedata" - ] - # now run the subprocess - subprocess.run(subprocess_args, check=True) - # check if the right number of checkpoints are saved - models_folder = os.path.join(temp_directory, "models") - # list all files in the "models" folder - files_in_models_folder = os.listdir(models_folder) - # assert that the number of files is equal to 10 - assert ( - len(files_in_models_folder) == 1 - ), "Expected 1 file in the 'models' folder" - - # check if the right number of images were saved - animations_folder = os.path.join(temp_directory, "images/animations") - files_in_animations_folder = os.listdir(animations_folder) - # assert that the number of files is equal to 10 - assert ( - len(files_in_animations_folder) == 1 - ), "Expected 1 file in the 'images/animations' folder" - - # also check that all files in here have the same name elements - expected_substring = "epoch_" + str(n_epochs - 1) - for file_name in files_in_models_folder: - assert ( - expected_substring in file_name - ), f"File '{file_name}' does not contain the expected substring" - - # also check that all files in here have the same name elements - for file_name in files_in_animations_folder: - assert ( - expected_substring in file_name - ), f"File '{file_name}' does not contain the expected substring" - - def test_DE_chkpt_saved(temp_directory): noise_level = "low" n_models = 10 diff --git a/test/test_DeepEvidentialRegression.py b/test/test_DeepEvidentialRegression.py new file mode 100644 index 0000000..2fbbf11 --- /dev/null +++ b/test/test_DeepEvidentialRegression.py @@ -0,0 +1,76 @@ +import pytest +import os +import subprocess +import tempfile +import shutil + + +@pytest.fixture +def temp_directory(): + # Setup: Create a temporary directory with one folder level + temp_dir = tempfile.mkdtemp() + + # Create subdirectories within the temporary directory + models_dir = os.path.join(temp_dir, "models") + os.makedirs(models_dir) + + animations_dir = os.path.join(temp_dir, "images", "animations") + os.makedirs(animations_dir) + + yield temp_dir # Provide the temporary directory path to the test function + + # Teardown: Remove the temporary directory and its contents + """ + for dir_path in [models_dir, animations_dir, temp_dir]: + os.rmdir(dir_path) + # Teardown: Remove the temporary directory and its contents + """ + shutil.rmtree(temp_dir) + + +def test_DER_chkpt_saved(temp_directory): + noise_level = "low" + wd = str(temp_directory) + "/" + n_epochs = 2 + subprocess_args = [ + "python", + "src/scripts/DeepEvidentialRegression.py", + noise_level, + wd, + "--n_epochs", + str(n_epochs), + "--save_final_checkpoint", + "--savefig", + "--generatedata" + ] + # now run the subprocess + subprocess.run(subprocess_args, check=True) + # check if the right number of checkpoints are saved + models_folder = os.path.join(temp_directory, "models") + # list all files in the "models" folder + files_in_models_folder = os.listdir(models_folder) + # assert that the number of files is equal to 10 + assert ( + len(files_in_models_folder) == 1 + ), "Expected 1 file in the 'models' folder" + + # check if the right number of images were saved + animations_folder = os.path.join(temp_directory, "images/animations") + files_in_animations_folder = os.listdir(animations_folder) + # assert that the number of files is equal to 10 + assert ( + len(files_in_animations_folder) == 1 + ), "Expected 1 file in the 'images/animations' folder" + + # also check that all files in here have the same name elements + expected_substring = "epoch_" + str(n_epochs - 1) + for file_name in files_in_models_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" + + # also check that all files in here have the same name elements + for file_name in files_in_animations_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" From 1309bff8e66b6cceeef70ab1257dc9c4537a0288 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Fri, 19 Apr 2024 16:43:49 -0500 Subject: [PATCH 19/31] adding option to choose between defaults DER and DE --- src/scripts/DeepEnsemble.py | 83 ++++++++++++++---------- src/scripts/DeepEvidentialRegression.py | 84 +++++++++++++++---------- src/utils/config.py | 62 +++++++++--------- src/utils/defaults.py | 53 ---------------- src/utils/defaults_DE.py | 34 +++++++--- src/utils/defaults_DER.py | 33 +++++++--- 6 files changed, 184 insertions(+), 165 deletions(-) delete mode 100644 src/utils/defaults.py diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index 48b4702..af2aadf 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -10,7 +10,7 @@ from data import DataModules from models import ModelModules from utils.config import Config -from utils.defaults import Defaults +from utils.defaults_DE import DefaultsDE from data.data import DataPreparation, MyDataLoader #from plots import Plots @@ -28,15 +28,22 @@ def parse_args(): parser.add_argument("--config", '-c', default=None) # data info - parser.add_argument("--data_path", '-d', default=Defaults['data']['data_path'], choices=DataModules.keys()) - parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + parser.add_argument("--data_path", '-d', + default=DefaultsDE['data']['data_path'], + choices=DataModules.keys()) + parser.add_argument("--data_engine", '-dl', + default=DefaultsDE['data']['data_engine'], + choices=DataModules.keys()) # model parser.add_argument("--model_path", '-m', default=None) - parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + parser.add_argument("--model_engine", '-e', + default=DefaultsDE['model']['model_engine'], + choices=ModelModules.keys()) # path to save the yaml if thats what you'd like - parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) + parser.add_argument("--out_dir", + default=DefaultsDE['common']['out_dir']) # List of metrics (cannot supply specific kwargs) # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) @@ -52,9 +59,10 @@ def parse_args(): help="Used to load the associated .h5 data file", ) parser.add_argument( - "noise_level", + "--noise_level", type=str, default="low", + choices=["low", "medium", "high", "vhigh"], help="low, medium, high or vhigh, \ used to look up associated sigma value", ) @@ -94,7 +102,7 @@ def parse_args(): ) # now args for model parser.add_argument( - "n_models", + "--n_models", type=int, default=100, help="Number of MVEs in the ensemble", @@ -124,8 +132,9 @@ def parse_args(): step_decrease_to_0.5, and step_decrease_to_1.0", ) parser.add_argument( - "wd", + "--wd", type=str, + default="./DeepUQResources/", help="Top level of directory, required arg", ) parser.add_argument( @@ -192,7 +201,7 @@ def parse_args(): config = Config(args.config) else: - temp_config = Defaults['common']['temp_config'] + temp_config = DefaultsDE['common']['temp_config'] os.makedirs(os.path.dirname(temp_config), exist_ok=True) input_yaml = { @@ -251,15 +260,18 @@ def beta_type(value): if __name__ == "__main__": config = parse_args() - size_df = config.get_item("data", "size_df") - noise = config.get_item("data", "noise_level") - norm = config.get_item("data", "normalize", raise_exception=False) - val_prop = config.get_item("data", "val_proportion") - rs = config.get_item("data", "randomseed") - BATCH_SIZE = config.get_item("data", "batchsize") + size_df = config.get_item("data", "size_df", "DE") + noise = config.get_item("data", "noise_level", "DE") + norm = config.get_item("data", "normalize", "DE", raise_exception=False) + val_prop = config.get_item("data", "val_proportion", "DE") + rs = config.get_item("data", "randomseed", "DE") + BATCH_SIZE = config.get_item("data", "batchsize", "DE") sigma = DataPreparation.get_sigma(noise) - print("generated data", config.get_item("data", "generatedata", raise_exception=False)) - if config.get_item("data", "generatedata", raise_exception=False): + print("generated data", config.get_item("data", + "generatedata", + "DE", + raise_exception=False)) + if config.get_item("data", "generatedata", "DE", raise_exception=False): # generate the df data = DataPreparation() data.sample_params_from_prior(size_df) @@ -303,26 +315,33 @@ def beta_type(value): # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - model_name = config.get_item("model", "model_type") + "_noise_" + noise - model, lossFn = models.model_setup_DE(config.get_item("model", "loss_type"), DEVICE) + model_name = config.get_item("model", "model_type", "DE") + "_noise_" + noise + model, lossFn = models.model_setup_DE(config.get_item("model", + "loss_type", + "DE"), + DEVICE) model_ensemble = train.train_DE( trainDataLoader, x_val, y_val, - config.get_item("model", "init_lr"), + config.get_item("model", "init_lr", "DE"), DEVICE, - config.get_item("model", "loss_type"), - config.get_item("model", "n_models"), - config.get_item("model", "wd"), + config.get_item("model", "loss_type", "DE"), + config.get_item("model", "n_models", "DE"), + config.get_item("model", "wd", "DE"), model_name, - BETA=config.get_item("model", "BETA"), - EPOCHS=config.get_item("model", "n_epochs"), - path_to_model=config.get_item("model", "path_to_models"), - save_all_checkpoints=config.get_item("model", "save_all_checkpoints"), - save_final_checkpoint=config.get_item("model", "save_final_checkpoint"), + BETA=config.get_item("model", "BETA", "DE"), + EPOCHS=config.get_item("model", "n_epochs", "DE"), + path_to_model=config.get_item("model", "path_to_models", "DE"), + save_all_checkpoints=config.get_item("model", "save_all_checkpoints", + "DE"), + save_final_checkpoint=config.get_item("model", + "save_final_checkpoint", + "DE"), overwrite_final_checkpoint=config.get_item("model", - "overwrite_final_checkpoint"), - plot=config.get_item("model", "plot"), - savefig=config.get_item("model", "savefig"), - verbose=config.get_item("model", "verbose"), + "overwrite_final_checkpoint", + "DE"), + plot=config.get_item("model", "plot", "DE"), + savefig=config.get_item("model", "savefig", "DE"), + verbose=config.get_item("model", "verbose", "DE"), ) diff --git a/src/scripts/DeepEvidentialRegression.py b/src/scripts/DeepEvidentialRegression.py index 28f7bf2..868fcbe 100644 --- a/src/scripts/DeepEvidentialRegression.py +++ b/src/scripts/DeepEvidentialRegression.py @@ -10,7 +10,7 @@ from data import DataModules from models import ModelModules from utils.config import Config -from utils.defaults import Defaults +from utils.defaults_DER import DefaultsDER from data.data import DataPreparation, MyDataLoader #from plots import Plots @@ -26,15 +26,22 @@ def parse_args(): parser.add_argument("--config", '-c', default=None) # data info - parser.add_argument("--data_path", '-d', default=Defaults['data']['data_path'], choices=DataModules.keys()) - parser.add_argument("--data_engine", '-dl', default=Defaults['data']['data_engine'], choices=DataModules.keys()) + parser.add_argument("--data_path", '-d', + default=DefaultsDER['data']['data_path'], + choices=DataModules.keys()) + parser.add_argument("--data_engine", '-dl', + default=DefaultsDER['data']['data_engine'], + choices=DataModules.keys()) # model parser.add_argument("--model_path", '-m', default=None) - parser.add_argument("--model_engine", '-e', default=Defaults['model']['model_engine'], choices=ModelModules.keys()) + parser.add_argument("--model_engine", '-e', + default=DefaultsDER['model']['model_engine'], + choices=ModelModules.keys()) # path to save the yaml if thats what you'd like - parser.add_argument("--out_dir", default=Defaults['common']['out_dir']) + parser.add_argument("--out_dir", + default=DefaultsDER['common']['out_dir']) # List of metrics (cannot supply specific kwargs) # parser.add_argument("--metrics", nargs='+', default=list(Defaults['metrics'].keys()), choices=Metrics.keys()) @@ -50,9 +57,10 @@ def parse_args(): help="Used to load the associated .h5 data file", ) parser.add_argument( - "noise_level", + "--noise_level", type=str, default="low", + choices=["low","medium","high","vhigh"], help="low, medium, high or vhigh, \ used to look up associated sigma value", ) @@ -112,15 +120,16 @@ def parse_args(): help="Coefficient for DER", ) parser.add_argument( - "wd", + "--wd", type=str, + default="./DeepUQResources/", help="Top level of directory, required arg", ) parser.add_argument( "--model_type", type=str, required=False, - default="DE", + default="DER", help="Beginning of name for saved checkpoints and figures", ) parser.add_argument( @@ -180,7 +189,7 @@ def parse_args(): config = Config(args.config) else: - temp_config = Defaults['common']['temp_config'] + temp_config = DefaultsDER['common']['temp_config'] os.makedirs(os.path.dirname(temp_config), exist_ok=True) input_yaml = { @@ -191,7 +200,7 @@ def parse_args(): "loss_type": args.loss_type, "init_lr": args.init_lr, "wd": args.wd, - "coeff": args.COEFF, + "COEFF": args.COEFF, "n_epochs": args.n_epochs, "path_to_models": args.path_to_models, "save_all_checkpoints": args.save_all_checkpoints, @@ -222,15 +231,15 @@ def parse_args(): if __name__ == "__main__": config = parse_args() - size_df = config.get_item("data", "size_df") - noise = config.get_item("data", "noise_level") - norm = config.get_item("data", "normalize", raise_exception=False) - val_prop = config.get_item("data", "val_proportion") - rs = config.get_item("data", "randomseed") - BATCH_SIZE = config.get_item("data", "batchsize") + size_df = config.get_item("data", "size_df", "DER") + noise = config.get_item("data", "noise_level", "DER") + norm = config.get_item("data", "normalize", "DER", raise_exception=False) + val_prop = config.get_item("data", "val_proportion", "DER") + rs = config.get_item("data", "randomseed", "DER") + BATCH_SIZE = config.get_item("data", "batchsize", "DER") sigma = DataPreparation.get_sigma(noise) - print("generated data", config.get_item("data", "generatedata", raise_exception=False)) - if config.get_item("data", "generatedata", raise_exception=False): + print("generated data", config.get_item("data", "generatedata", "DER", raise_exception=False)) + if config.get_item("data", "generatedata", "DER", raise_exception=False): # generate the df data = DataPreparation() data.sample_params_from_prior(size_df) @@ -272,27 +281,38 @@ def parse_args(): print("[INFO] initializing the gal model...") # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - model_name = config.get_item("model", "model_type") + "_noise_" + noise - model, lossFn = models.model_setup_DER(config.get_item("model", "loss_type"), DEVICE) + model_name = config.get_item("model", "model_type", "DER") + "_noise_" + noise + model, lossFn = models.model_setup_DER(config.get_item("model", + "loss_type", + "DER"), DEVICE) model_ensemble = train.train_DER( trainDataLoader, x_val, y_val, - config.get_item("model", "init_lr"), + config.get_item("model", "init_lr", "DER"), DEVICE, - config.get_item("model", "coeff"), - config.get_item("model", "loss_type"), - config.get_item("model", "wd"), + config.get_item("model", "COEFF", "DER"), + config.get_item("model", "loss_type", "DER"), + config.get_item("model", "wd", "DER"), model_name, - EPOCHS=config.get_item("model", "n_epochs"), - path_to_model=config.get_item("model", "path_to_models"), - save_all_checkpoints=config.get_item("model", "save_all_checkpoints"), - save_final_checkpoint=config.get_item("model", "save_final_checkpoint"), + EPOCHS=config.get_item("model", + "n_epochs", + "DER"), + path_to_model=config.get_item("model", + "path_to_models", + "DER"), + save_all_checkpoints=config.get_item("model", + "save_all_checkpoints", + "DER"), + save_final_checkpoint=config.get_item("model", + "save_final_checkpoint", + "DER"), overwrite_final_checkpoint=config.get_item("model", - "overwrite_final_checkpoint"), - plot=config.get_item("model", "plot"), - savefig=config.get_item("model", "savefig"), - verbose=config.get_item("model", "verbose"), + "overwrite_final_checkpoint", + "DER"), + plot=config.get_item("model", "plot", "DER"), + savefig=config.get_item("model", "savefig", "DER"), + verbose=config.get_item("model", "verbose", "DER"), ) diff --git a/src/utils/config.py b/src/utils/config.py index 106fcaa..0baab3d 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -1,9 +1,8 @@ - from typing import Optional -import os -import yaml - -from utils.defaults import Defaults +import os +import yaml +from utils.defaults_DE import DefaultsDE +from utils.defaults_DER import DefaultsDER def get_item(section, item, raise_exception=True): return Config().get_item(section, item, raise_exception) @@ -12,32 +11,32 @@ def get_section(section, raise_exception=True): return Config().get_section(section, raise_exception) -class Config: +class Config: ENV_VAR_PATH = "DeepUQ_Config" + def __init__(self, config_path:Optional[str]=None) -> None: # okay what Maggie is doing here is a little trick or "cheat" # where the config_path is saved to the ENV_VAR_PATH # the first time this thing is called and then later it # can be loaded from this temp location saving on memory - if config_path is not None: - # Add it to the env vars in case we need to get it later. + if config_path is not None: + # Add it to the env vars in case we need to get it later. os.environ[self.ENV_VAR_PATH] = config_path - else: - # Get it from the env vars - try: - config_path = os.environ[self.ENV_VAR_PATH] - except KeyError: + else: + # Get it from the env vars + try: + config_path = os.environ[self.ENV_VAR_PATH] + except KeyError: assert False, "Cannot load config from enviroment. Hint: Have you set the config path by pasing a str path to Config?" - self.config = self._read_config(config_path) self._validate_config() - def _validate_config(self): - # Validate common - # TODO - pass + def _validate_config(self): + # Validate common + # TODO + pass - def _read_config(self, path): + def _read_config(self, path): assert os.path.exists(path), f"Config path at {path} does not exist." with open(path, 'r') as f: config = yaml.safe_load(f) @@ -45,20 +44,23 @@ def _read_config(self, path): # if raise_exception is True, then throws an error if we're missing # otherwise, pull value from the defaults.py - def get_item(self, section, item, raise_exception=True): - try: + def get_item(self, section, item, defaulttype, raise_exception=True): + try: return self.config[section][item] - except KeyError as e: - if raise_exception: + except KeyError as e: + if raise_exception: raise KeyError(f"Configuration File missing parameter {e}") - else: - return Defaults[section][item] + else: + return { + "DER": DefaultsDER, + "DE": DefaultsDE + }[defaulttype][section][item] - def get_section(self, section, raise_exception=True): - try: + def get_section(self, section, raise_exception=True): + try: return self.config[section] - except KeyError as e: - if raise_exception: + except KeyError as e: + if raise_exception: raise KeyError(e) - else: + else: return Defaults[section] diff --git a/src/utils/defaults.py b/src/utils/defaults.py deleted file mode 100644 index 920fcd4..0000000 --- a/src/utils/defaults.py +++ /dev/null @@ -1,53 +0,0 @@ -Defaults = { - "common":{ - "out_dir":"./DeepUQResources/results/", - "temp_config": "./DeepUQResources/temp/temp_config.yml", - }, - "data": { - "data_path": "./data/", - "data_engine": "DataLoader", - "size_df": 1000, - "noise_level": "low", - "normalize": False, - "val_proportion": 0.1, - "randomseed": 42, - "batchsize": 100, - "generatedata": False, - }, - "model": { - "model_path": "./models/", - # the engines are the classes, defined - "model_engine": "DE", - "model_type": "DE", - "loss_type": "bnll", - "n_models": 100, - "init_lr": 0.001, - "wd": "./", - "BETA": 0.5, - "n_epochs": 100, - }, - "plots_common": { - "axis_spines": False, - "tight_layout": True, - "default_colorway": "viridis", - "plot_style": "fast", - "parameter_labels" : ['$m$','$b$'], - "parameter_colors": ['#9C92A3','#0F5257'], - "line_style_cycle": ["-", "-."], - "figure_size": [6, 6] - }, - "plots":{ - "CDFRanks":{}, - "Ranks":{"num_bins":None}, - "CoverageFraction":{} - }, - "metrics_common": { - "use_progress_bar": False, - "samples_per_inference":1000, - "percentiles":[75, 85, 95] - }, - "metrics":{ - "AllSBC":{}, - "CoverageFraction": {}, - } -} diff --git a/src/utils/defaults_DE.py b/src/utils/defaults_DE.py index 43ac06a..663e430 100644 --- a/src/utils/defaults_DE.py +++ b/src/utils/defaults_DE.py @@ -1,14 +1,30 @@ -Defaults = { +DefaultsDE = { "common":{ - "out_dir":"./DeepDiagnosticsResources/results/", - "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", - "sim_location": "DeepDiagnosticsResources_Simulators" - }, + "out_dir":"./DeepUQResources/results/", + "temp_config": "./DeepUQResources/temp/temp_config_DE.yml", + }, + "data": { + "data_path": "./data/", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "normalize": False, + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + "generatedata": False, + }, "model": { - "model_engine": "SBIModel" - }, - "data":{ - "data_engine": "H5Data" + "model_path": "./models/", + # the engines are the classes, defined + "model_engine": "DE", + "model_type": "DE", + "loss_type": "bnll", + "n_models": 100, + "init_lr": 0.001, + "wd": "./", + "BETA": 0.5, + "n_epochs": 100, }, "plots_common": { "axis_spines": False, diff --git a/src/utils/defaults_DER.py b/src/utils/defaults_DER.py index 43ac06a..113cb1d 100644 --- a/src/utils/defaults_DER.py +++ b/src/utils/defaults_DER.py @@ -1,14 +1,29 @@ -Defaults = { +DefaultsDER = { "common":{ - "out_dir":"./DeepDiagnosticsResources/results/", - "temp_config": "./DeepDiagnosticsResources/temp/temp_config.yml", - "sim_location": "DeepDiagnosticsResources_Simulators" - }, + "out_dir":"./DeepUQResources/results/", + "temp_config": "./DeepUQResources/temp/temp_config_DER.yml", + }, + "data": { + "data_path": "./data/", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "normalize": False, + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + "generatedata": False, + }, "model": { - "model_engine": "SBIModel" - }, - "data":{ - "data_engine": "H5Data" + "model_path": "./models/", + # the engines are the classes, defined + "model_engine": "DER", + "model_type": "DER", + "loss_type": "SDER", + "init_lr": 0.001, + "wd": "./", + "COEFF": 0.5, + "n_epochs": 100, }, "plots_common": { "axis_spines": False, From 87759f34d7f3eba3f207061a596579e4f1922aaa Mon Sep 17 00:00:00 2001 From: beckynevin Date: Fri, 19 Apr 2024 17:06:13 -0500 Subject: [PATCH 20/31] moving both defaults to defaults.py --- src/utils/defaults_DE.py => defaults.py | 0 src/utils/defaults_DER.py | 52 ------------------------- 2 files changed, 52 deletions(-) rename src/utils/defaults_DE.py => defaults.py (100%) delete mode 100644 src/utils/defaults_DER.py diff --git a/src/utils/defaults_DE.py b/defaults.py similarity index 100% rename from src/utils/defaults_DE.py rename to defaults.py diff --git a/src/utils/defaults_DER.py b/src/utils/defaults_DER.py deleted file mode 100644 index 113cb1d..0000000 --- a/src/utils/defaults_DER.py +++ /dev/null @@ -1,52 +0,0 @@ -DefaultsDER = { - "common":{ - "out_dir":"./DeepUQResources/results/", - "temp_config": "./DeepUQResources/temp/temp_config_DER.yml", - }, - "data": { - "data_path": "./data/", - "data_engine": "DataLoader", - "size_df": 1000, - "noise_level": "low", - "normalize": False, - "val_proportion": 0.1, - "randomseed": 42, - "batchsize": 100, - "generatedata": False, - }, - "model": { - "model_path": "./models/", - # the engines are the classes, defined - "model_engine": "DER", - "model_type": "DER", - "loss_type": "SDER", - "init_lr": 0.001, - "wd": "./", - "COEFF": 0.5, - "n_epochs": 100, - }, - "plots_common": { - "axis_spines": False, - "tight_layout": True, - "default_colorway": "viridis", - "plot_style": "fast", - "parameter_labels" : ['$m$','$b$'], - "parameter_colors": ['#9C92A3','#0F5257'], - "line_style_cycle": ["-", "-."], - "figure_size": [6, 6] - }, - "plots":{ - "CDFRanks":{}, - "Ranks":{"num_bins":None}, - "CoverageFraction":{} - }, - "metrics_common": { - "use_progress_bar": False, - "samples_per_inference":1000, - "percentiles":[75, 85, 95] - }, - "metrics":{ - "AllSBC":{}, - "CoverageFraction": {}, - } -} From e22749faa7dc1f61ad5f2fb3362928083df5252d Mon Sep 17 00:00:00 2001 From: beckynevin Date: Fri, 19 Apr 2024 17:07:50 -0500 Subject: [PATCH 21/31] changing all import from defaults --- defaults.py | 53 +++++++++++++++++++++++++ src/scripts/DeepEnsemble.py | 2 +- src/scripts/DeepEvidentialRegression.py | 2 +- src/utils/config.py | 11 ++--- 4 files changed, 61 insertions(+), 7 deletions(-) diff --git a/defaults.py b/defaults.py index 663e430..f674903 100644 --- a/defaults.py +++ b/defaults.py @@ -51,3 +51,56 @@ "CoverageFraction": {}, } } +DefaultsDER = { + "common":{ + "out_dir":"./DeepUQResources/results/", + "temp_config": "./DeepUQResources/temp/temp_config_DER.yml", + }, + "data": { + "data_path": "./data/", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "normalize": False, + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + "generatedata": False, + }, + "model": { + "model_path": "./models/", + # the engines are the classes, defined + "model_engine": "DER", + "model_type": "DER", + "loss_type": "SDER", + "init_lr": 0.001, + "wd": "./", + "COEFF": 0.5, + "n_epochs": 100, + }, + "plots_common": { + "axis_spines": False, + "tight_layout": True, + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels" : ['$m$','$b$'], + "parameter_colors": ['#9C92A3','#0F5257'], + "line_style_cycle": ["-", "-."], + "figure_size": [6, 6] + }, + "plots":{ + "CDFRanks":{}, + "Ranks":{"num_bins":None}, + "CoverageFraction":{} + }, + "metrics_common": { + "use_progress_bar": False, + "samples_per_inference":1000, + "percentiles":[75, 85, 95] + }, + "metrics":{ + "AllSBC":{}, + "CoverageFraction": {}, + } +} + diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index af2aadf..639eafc 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -10,7 +10,7 @@ from data import DataModules from models import ModelModules from utils.config import Config -from utils.defaults_DE import DefaultsDE +from utils.defaults import DefaultsDE from data.data import DataPreparation, MyDataLoader #from plots import Plots diff --git a/src/scripts/DeepEvidentialRegression.py b/src/scripts/DeepEvidentialRegression.py index 868fcbe..d5393c6 100644 --- a/src/scripts/DeepEvidentialRegression.py +++ b/src/scripts/DeepEvidentialRegression.py @@ -10,7 +10,7 @@ from data import DataModules from models import ModelModules from utils.config import Config -from utils.defaults_DER import DefaultsDER +from utils.defaults import DefaultsDER from data.data import DataPreparation, MyDataLoader #from plots import Plots diff --git a/src/utils/config.py b/src/utils/config.py index 0baab3d..4fd50f3 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -1,13 +1,14 @@ from typing import Optional import os import yaml -from utils.defaults_DE import DefaultsDE -from utils.defaults_DER import DefaultsDER +from utils.defaults import DefaultsDE, DefaultsDER -def get_item(section, item, raise_exception=True): - return Config().get_item(section, item, raise_exception) -def get_section(section, raise_exception=True): +def get_item(section, item, raise_exception=True): + return Config().get_item(section, item, raise_exception) + + +def get_section(section, raise_exception=True): return Config().get_section(section, raise_exception) From a3ca63ccb345597ee583a486f6a90aa26eec0e3f Mon Sep 17 00:00:00 2001 From: beckynevin Date: Fri, 19 Apr 2024 17:09:05 -0500 Subject: [PATCH 22/31] moving defaults to the right place --- defaults.py => src/utils/defaults.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename defaults.py => src/utils/defaults.py (100%) diff --git a/defaults.py b/src/utils/defaults.py similarity index 100% rename from defaults.py rename to src/utils/defaults.py From eae7046dd158c6125ed92601648ef3429eeba5fb Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 22 Apr 2024 11:35:49 -0600 Subject: [PATCH 23/31] overwrites stuff on command line --- images/DeepUQWorkflow_Maggie.png | Bin 0 -> 305546 bytes src/scripts/DeepEnsemble.py | 87 ++++++++++-------------- src/scripts/DeepEvidentialRegression.py | 69 +++++++------------ src/train/train.py | 9 +-- src/utils/defaults.py | 23 +++++-- 5 files changed, 79 insertions(+), 109 deletions(-) create mode 100644 images/DeepUQWorkflow_Maggie.png diff --git a/images/DeepUQWorkflow_Maggie.png b/images/DeepUQWorkflow_Maggie.png new file mode 100644 index 0000000000000000000000000000000000000000..4d5c25f1f84760c6d84c8ab5f9b83fe8b7620b9a GIT binary patch literal 305546 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

^ZL%U5AMv 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 z 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 &@U1Irg?SFyo{h_lYbUCA3^`*c-n5L@|v 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

K-Xh47Um+pH5N?!fBAqO1QmVEOMk_+ONR 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%0D%*kNm1(;q2Seg|=8ioj&R=HIx4hQx@mZezgTU*3 zR3{kU)y(7;q-GmTkM*P_eHFaKKF@GtNpAS-DX0Drg<^)=o=~?(>bWp^j^z6-yUd=e z6F+b_0FD~kAv^sg_)*;{@wP0x#Kbp1NQ!BJqTa8dZMjGZdi>l-ZIuwp)Ic#H;Bt!9 ztpI@cNo~{4hLT>9<%8Pct_SK5u|KTW96l(JTCMdgEpzT#*-|$u>3FhmNUMUPI$`(* z5zwJ4XT<;tVt!8i19@RTPHJU>VcqI8MM|t<;@Gd7lK)S8XC7Ab+V=fr+M8R$Hf%eU zutjJWQfU?;QACqUl1S51X;d0EDpNufrAcU>RBKh5SZFKFbE`ozHLQ|G4SK)VT9NyC z-{+6#J&yN}_c-qL&%JN0^&76?yw2-9Kj-%nr=uML!h$1k0Q1P$9E#Ti&%Pm8#+cFv zB9j^jn9-<&sN0%1QOjhIU>!d9zzvf4d{I%;BNCbRN3}Hy!C#U8f1uC*j9Wb=m;!5& zm3DHy)kmJ_-|HlRjJ38hjl<1)v=N}E`_A8hSb1IaU3saEYjgtwqMvXHI3WW>D85Ci zX}1;LzcO1Y?XU*TWM`_%2I+?Lmz4+Kw&~1^Q4;shKXNGMMe>8r;o+gWw|YU@+%_{Q z$*_+{z#(-}>zG ztPY$QWWWOI4a^$ug6(l1so-%>p*|_rjLhgXK@dsGv&Gtbcy7R}9o=}o$JokJ%0DT} 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 Date: Mon, 22 Apr 2024 11:41:06 -0600 Subject: [PATCH 24/31] removing wd from input --- src/scripts/DeepEnsemble.py | 8 -------- src/scripts/DeepEvidentialRegression.py | 8 -------- src/train/train.py | 23 +++++++++++------------ 3 files changed, 11 insertions(+), 28 deletions(-) diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index 70797b8..85cb0ea 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -123,12 +123,6 @@ def parse_args(): there are string options: linear_decrease, \ step_decrease_to_0.5, and step_decrease_to_1.0", ) - parser.add_argument( - "--wd", - type=str, - default=DefaultsDE['model']['wd'], - help="Top level of directory, required arg", - ) parser.add_argument( "--model_type", type=str, @@ -201,7 +195,6 @@ def parse_args(): "loss_type": args.loss_type, "n_models": args.n_models, "init_lr": args.init_lr, - "wd": args.wd, "BETA": args.BETA, "n_epochs": args.n_epochs, "save_all_checkpoints": args.save_all_checkpoints, @@ -311,7 +304,6 @@ def beta_type(value): DEVICE, config.get_item("model", "loss_type", "DE"), config.get_item("model", "n_models", "DE"), - config.get_item("model", "wd", "DE"), model_name, BETA=config.get_item("model", "BETA", "DE"), EPOCHS=config.get_item("model", "n_epochs", "DE"), diff --git a/src/scripts/DeepEvidentialRegression.py b/src/scripts/DeepEvidentialRegression.py index 30fe0c3..c9d9729 100644 --- a/src/scripts/DeepEvidentialRegression.py +++ b/src/scripts/DeepEvidentialRegression.py @@ -111,12 +111,6 @@ def parse_args(): default=DefaultsDER['model']['COEFF'], help="Coefficient for DER", ) - parser.add_argument( - "--wd", - type=str, - default=DefaultsDER['model']['wd'], - help="Top level of directory, required arg", - ) parser.add_argument( "--model_type", type=str, @@ -182,7 +176,6 @@ def parse_args(): "model_type": args.model_type, "loss_type": args.loss_type, "init_lr": args.init_lr, - "wd": args.wd, "COEFF": args.COEFF, "n_epochs": args.n_epochs, "save_all_checkpoints": args.save_all_checkpoints, @@ -274,7 +267,6 @@ def parse_args(): DEVICE, config.get_item("model", "COEFF", "DER"), config.get_item("model", "loss_type", "DER"), - config.get_item("model", "wd", "DER"), model_name, EPOCHS=config.get_item("model", "n_epochs", diff --git a/src/train/train.py b/src/train/train.py index f0a2561..ad9e252 100644 --- a/src/train/train.py +++ b/src/train/train.py @@ -15,7 +15,6 @@ def train_DER( DEVICE, COEFF, loss_type, - wd, model_name="DER", EPOCHS=100, path_to_model="models/", @@ -31,7 +30,8 @@ def train_DER( # option to skip running the model if you don't care about # saving all checkpoints and only want to save the final final_chk = ( - path_to_model + str(path_to_model) + + "checkpoints/" + str(model_name) + "_loss_" + str(loss_type) @@ -227,7 +227,7 @@ def train_DER( # ax1.errorbar(200, 600, yerr=5, # color='red', capsize=2) plt.savefig( - str(wd) + str(path_to_model) + "images/animations/" + str(model_name) + "_loss_" @@ -254,8 +254,8 @@ def train_DER( "std_u_al_validation": std_u_al_val, "std_u_ep_validation": std_u_ep_val, }, - str(wd) - + "models/" + str(path_to_model) + + "checkpoints/" + str(model_name) + "_loss_" + str(loss_type) @@ -278,8 +278,8 @@ def train_DER( "std_u_al_validation": std_u_al_val, "std_u_ep_validation": std_u_ep_val, }, - str(wd) - + "models/" + str(path_to_model) + + "checkpoints/" + str(model_name) + "_loss_" + str(loss_type) @@ -302,7 +302,6 @@ def train_DE( DEVICE, loss_type, n_models, - wd, model_name="DE", BETA=None, EPOCHS=100, @@ -610,7 +609,7 @@ def train_DE( # ax1.errorbar(200, 600, yerr=5, # color='red', capsize=2) plt.savefig( - str(wd) + str(path_to_model) + "images/animations/" + str(model_name) + "_nmodel_" @@ -640,8 +639,8 @@ def train_DE( "x_val": x_val, "y_val": y_val, }, - str(wd) - + "models/" + str(path_to_model) + + 'checkpoints/' + str(model_name) + "_beta_" + str(BETA) @@ -665,7 +664,7 @@ def train_DE( "x_val": x_val, "y_val": y_val, }, - str(path_to_model) + + str(path_to_model) + str(model_name) + "_nmodel_" + str(m) From 3008979fa9003a814711eb827e721c2902675667 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 22 Apr 2024 11:42:15 -0600 Subject: [PATCH 25/31] removing wd from defaults --- README.md | 23 +++++++++++++++++------ src/utils/defaults.py | 2 -- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 51128e7..93b3b3e 100644 --- a/README.md +++ b/README.md @@ -12,22 +12,33 @@ DeepUQ is a package for injecting and measuring different types of uncertainty i ![GitHub Workflow Status](https://img.shields.io/github/workflow/status/owner/repo/test-repo?label=test) ## Workflow -![Folder structure overview](images/folders_deepUQ.png) +![Folder structure overview](images/DeepUQWorkflow_Maggie.png) -Getting a little more specific: +The scripts can be accessed via the ipython example notebooks or via the model modules (ie `DeepEnsemble.py`). For example, to ingest data and train a Deep Ensemble: +> cd src/scripts/ -![python module overview](images/workflow_deepUQ.png) +> python DeepEnsemble.py -These modules can be accessed via the ipython example notebooks or via the model modules (ie `DeepEnsemble.py`). For example, to ingest data and train a Deep Ensemble: -> cd src/scripts/ +With no config file specified, this command will pull settings from the `default.py` file within `utils`. For the `DeepEnsemble.py` script, it will automatically select the `DefaultsDE` dictionary. + +Another option is to specify your own config file: + +> python DeepEnsemble.py --config "path/to/config/myconfig.yaml" -> python DeepEnsemble.py low 10 /Users/rnevin/Documents/DeepUQ/ --save_final_checkpoint --savefig --n_epochs=10 +Where you would modify the "path/to/config/myconfig.yaml" to specify where your own yaml lives. + +The third option is to input settings on the command line. These choices are then combined with the default settings and output in a temporary yaml. + +> python DeepEnsemble.py --noise_level "low" --n_models 10 --out_dir ./DeepUQResources/results/--save_final_checkpoint True --savefig True --n_epochs 10 This command will train a 10 network, 10 epoch ensemble on the low noise data and will save figures and final checkpoints to the specified directory. Required arguments are the noise setting (low/medium/high), the number of ensembles, and the working directory. For more information on the arguments: > python DeepEnsemble.py --help +The other available script is the `DeepEvidentialRegression.py` script: +> python DeepEvidentialRegression.py --help + ## Installation ### Clone this repo diff --git a/src/utils/defaults.py b/src/utils/defaults.py index c601b29..e190c24 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -20,7 +20,6 @@ "loss_type": "bnll_loss", "n_models": 100, "init_lr": 0.001, - "wd": "./", "BETA": 0.5, "n_epochs": 100, "save_all_checkpoints": False, @@ -77,7 +76,6 @@ "model_type": "DER", "loss_type": "SDER", "init_lr": 0.001, - "wd": "./", "COEFF": 0.5, "n_epochs": 100, "save_all_checkpoints": False, From d0206e0d0e550535702950848cc2d252f074cf56 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 24 Apr 2024 22:54:28 -0600 Subject: [PATCH 26/31] DER tests running --- test/test_DeepEvidentialRegression.py | 87 +++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 4 deletions(-) diff --git a/test/test_DeepEvidentialRegression.py b/test/test_DeepEvidentialRegression.py index 2fbbf11..6756671 100644 --- a/test/test_DeepEvidentialRegression.py +++ b/test/test_DeepEvidentialRegression.py @@ -3,6 +3,7 @@ import subprocess import tempfile import shutil +import yaml @pytest.fixture @@ -11,7 +12,10 @@ def temp_directory(): temp_dir = tempfile.mkdtemp() # Create subdirectories within the temporary directory - models_dir = os.path.join(temp_dir, "models") + yaml_dir = os.path.join(temp_dir, "yamls") + os.makedirs(yaml_dir) + + models_dir = os.path.join(temp_dir, "checkpoints") os.makedirs(models_dir) animations_dir = os.path.join(temp_dir, "images", "animations") @@ -27,16 +31,47 @@ def temp_directory(): """ shutil.rmtree(temp_dir) +def create_test_config(temp_directory, n_epochs): + print('dumping temp yaml') + print('temp_dir', temp_directory) + input_yaml = { + "common": {"out_dir": str(temp_directory)},#+"results/"}, + "model": {"model_engine": "DER", + "model_type": "DER", + "loss_type": "DER", + "init_lr": 0.001, + "COEFF": 0.5, + "n_epochs": n_epochs, + "save_all_checkpoints": False, + "save_final_checkpoint": True, + "overwrite_final_checkpoint": True, + "plot": False, + "savefig": True, + "verbose": False, + }, + "data": {"data_path": "./data", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + }, + } + print('theoretically dumping here', str(temp_directory)+"yamls/DER.yaml") + yaml.dump(input_yaml, open(str(temp_directory)+"yamls/DER.yaml", "w")) + def test_DER_chkpt_saved(temp_directory): noise_level = "low" - wd = str(temp_directory) + "/" n_epochs = 2 subprocess_args = [ "python", "src/scripts/DeepEvidentialRegression.py", + "--noise_level", noise_level, - wd, + "--out_dir", + str(temp_directory) + '/', "--n_epochs", str(n_epochs), "--save_final_checkpoint", @@ -46,7 +81,51 @@ def test_DER_chkpt_saved(temp_directory): # now run the subprocess subprocess.run(subprocess_args, check=True) # check if the right number of checkpoints are saved - models_folder = os.path.join(temp_directory, "models") + models_folder = os.path.join(temp_directory, "checkpoints") + # list all files in the "models" folder + files_in_models_folder = os.listdir(models_folder) + # assert that the number of files is equal to 10 + assert ( + len(files_in_models_folder) == 1 + ), "Expected 1 file in the 'models' folder" + + # check if the right number of images were saved + animations_folder = os.path.join(temp_directory, "images/animations") + files_in_animations_folder = os.listdir(animations_folder) + # assert that the number of files is equal to 10 + assert ( + len(files_in_animations_folder) == 1 + ), "Expected 1 file in the 'images/animations' folder" + + # also check that all files in here have the same name elements + expected_substring = "epoch_" + str(n_epochs - 1) + for file_name in files_in_models_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" + + # also check that all files in here have the same name elements + for file_name in files_in_animations_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" + + +def test_DER_from_config(temp_directory): + # create the test config dynamically + # make the temporary config file + n_epochs = 2 + create_test_config(temp_directory+"/", n_epochs) + subprocess_args = [ + "python", + "src/scripts/DeepEvidentialRegression.py", + "--config", + str(temp_directory)+"/yamls/DER.yaml", + ] + # now run the subprocess + subprocess.run(subprocess_args, check=True) + # check if the right number of checkpoints are saved + models_folder = os.path.join(temp_directory, "checkpoints") # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) # assert that the number of files is equal to 10 From a0fa2859e16e611f84da4c1b01e22f4e16b29bca Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 24 Apr 2024 23:09:23 -0600 Subject: [PATCH 27/31] train now saving properly in checkpoint --- src/train/train.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/train/train.py b/src/train/train.py index ad9e252..c235c3d 100644 --- a/src/train/train.py +++ b/src/train/train.py @@ -226,6 +226,7 @@ def train_DER( if savefig: # ax1.errorbar(200, 600, yerr=5, # color='red', capsize=2) + print('path to model', path_to_model) plt.savefig( str(path_to_model) + "images/animations/" @@ -336,7 +337,8 @@ def train_DE( # saving all checkpoints and only want to save the final if loss_type == "bnll_loss": final_chk = ( - path_to_model + str(path_to_model) + + "checkpoints/" + str(model_name) + "_beta_" + str(BETA) @@ -348,7 +350,8 @@ def train_DE( ) else: final_chk = ( - path_to_model + str(path_to_model) + + "checkpoints/" + str(model_name) + "_nmodel_" + str(m) @@ -665,6 +668,7 @@ def train_DE( "y_val": y_val, }, str(path_to_model) + + "checkpoints/" + str(model_name) + "_nmodel_" + str(m) @@ -688,7 +692,8 @@ def train_DE( "x_val": x_val, "y_val": y_val, }, - str(path_to_model) + str(path_to_model) + + "checkpoints/" + str(model_name) + "_beta_" + str(BETA) @@ -713,6 +718,7 @@ def train_DE( "y_val": y_val, }, str(path_to_model) + + "checkpoints/" + str(model_name) + "_nmodel_" + str(m) From 1277e13d421c8f7958b05668ad5cc7b8b9e725c7 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Wed, 24 Apr 2024 23:09:41 -0600 Subject: [PATCH 28/31] passing most of DE tests --- test/test_DeepEnsemble.py | 153 ++++++++++++++++++++++++++++---------- 1 file changed, 113 insertions(+), 40 deletions(-) diff --git a/test/test_DeepEnsemble.py b/test/test_DeepEnsemble.py index dbbaf57..2eec0dc 100644 --- a/test/test_DeepEnsemble.py +++ b/test/test_DeepEnsemble.py @@ -3,6 +3,7 @@ import subprocess import tempfile import shutil +import yaml @pytest.fixture @@ -11,7 +12,10 @@ def temp_directory(): temp_dir = tempfile.mkdtemp() # Create subdirectories within the temporary directory - models_dir = os.path.join(temp_dir, "models") + yaml_dir = os.path.join(temp_dir, "yamls") + os.makedirs(yaml_dir) + + models_dir = os.path.join(temp_dir, "checkpoints") os.makedirs(models_dir) animations_dir = os.path.join(temp_dir, "images", "animations") @@ -28,17 +32,97 @@ def temp_directory(): shutil.rmtree(temp_dir) +def create_test_config(temp_directory, n_epochs): + print('dumping temp yaml') + print('temp_dir', temp_directory) + input_yaml = { + "common": {"out_dir": str(temp_directory)}, + "model": {"model_engine": "DE", + "model_type": "DE", + "loss_type": "bnll_loss", + "init_lr": 0.001, + "BETA": 0.5, + "n_models": 2, + "n_epochs": n_epochs, + "save_all_checkpoints": False, + "save_final_checkpoint": True, + "overwrite_final_checkpoint": True, + "plot": False, + "savefig": True, + "verbose": False, + }, + "data": {"data_path": "./data", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + }, + } + print('theoretically dumping here', str(temp_directory)+"yamls/DE.yaml") + yaml.dump(input_yaml, open(str(temp_directory)+"yamls/DE.yaml", "w")) + + +def test_DE_from_config(temp_directory): + # create the test config dynamically + # make the temporary config file + n_epochs = 2 + n_models = 2 + create_test_config(temp_directory+"/", n_epochs) + subprocess_args = [ + "python", + "src/scripts/DeepEnsemble.py", + "--config", + str(temp_directory)+"/yamls/DE.yaml", + ] + # now run the subprocess + subprocess.run(subprocess_args, check=True) + # check if the right number of checkpoints are saved + models_folder = os.path.join(temp_directory, "checkpoints") + print('this is the checkpoints folder', models_folder) + # list all files in the "models" folder + files_in_models_folder = os.listdir(models_folder) + print('files in checkpoints folder', files_in_models_folder) + # assert that the number of files is equal to 10 + assert ( + len(files_in_models_folder) == n_models + ), f"Expected {n_models} file in the 'checkpoints' folder" + + # check if the right number of images were saved + animations_folder = os.path.join(temp_directory, "images/animations") + files_in_animations_folder = os.listdir(animations_folder) + assert ( + len(files_in_animations_folder) == n_models + ), f"Expected {n_models} file in the 'images/animations' folder" + + # also check that all files in here have the same name elements + expected_substring = "epoch_" + str(n_epochs - 1) + for file_name in files_in_models_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" + + # also check that all files in here have the same name elements + for file_name in files_in_animations_folder: + assert ( + expected_substring in file_name + ), f"File '{file_name}' does not contain the expected substring" + + def test_DE_chkpt_saved(temp_directory): noise_level = "low" - n_models = 10 - wd = str(temp_directory) + "/" + n_models = 2 n_epochs = 2 subprocess_args = [ "python", "src/scripts/DeepEnsemble.py", + "--noise_level", noise_level, + "--n_models", str(n_models), - wd, + "--out_dir", + str(temp_directory) + '/', "--n_epochs", str(n_epochs), "--save_final_checkpoint", @@ -48,13 +132,13 @@ def test_DE_chkpt_saved(temp_directory): # now run the subprocess subprocess.run(subprocess_args, check=True) # check if the right number of checkpoints are saved - models_folder = os.path.join(temp_directory, "models") + models_folder = os.path.join(temp_directory, "checkpoints") # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) # assert that the number of files is equal to 10 assert ( len(files_in_models_folder) == n_models - ), "Expected 10 files in the 'models' folder" + ), f"Expected {n_models} files in the 'checkpoints' folder" # check if the right number of images were saved animations_folder = os.path.join(temp_directory, "images/animations") @@ -62,7 +146,7 @@ def test_DE_chkpt_saved(temp_directory): # assert that the number of files is equal to 10 assert ( len(files_in_animations_folder) == n_models - ), "Expected 10 files in the 'images/animations' folder" + ), f"Expected {n_models} files in the 'images/animations' folder" # also check that all files in here have the same name elements expected_substring = "epoch_" + str(n_epochs - 1) @@ -81,18 +165,20 @@ def test_DE_chkpt_saved(temp_directory): @pytest.mark.xfail(strict=True) def test_DE_no_chkpt_saved_xfail(temp_directory): noise_level = "low" - n_models = 10 - wd = str(temp_directory) + "/" + n_models = 2 n_epochs = 2 subprocess_args = [ "python", "src/scripts/DeepEnsemble.py", + "--noise_level", noise_level, + "--n_models", str(n_models), - wd, + "--out_dir", + str(temp_directory) + '/', "--n_epochs", str(n_epochs), - "--generatedata" + "--generatedata", ] # now run the subprocess subprocess.run(subprocess_args, check=True) @@ -103,28 +189,32 @@ def test_DE_no_chkpt_saved_xfail(temp_directory): # assert that the number of files is equal to 10 assert ( len(files_in_models_folder) == n_models - ), "Expected 10 files in the 'models' folder" + ), f"Expected {n_models} files in the 'models' folder" def test_DE_no_chkpt_saved(temp_directory): noise_level = "low" - n_models = 10 - wd = str(temp_directory) + "/" + n_models = 2 n_epochs = 2 subprocess_args = [ "python", "src/scripts/DeepEnsemble.py", + "--noise_level", noise_level, + "--n_models", str(n_models), - wd, + "--out_dir", + str(temp_directory) + '/', "--n_epochs", str(n_epochs), - "--generatedata" + "--generatedata", + "--save_final_checkpoint", + "False" ] # now run the subprocess subprocess.run(subprocess_args, check=True) # check if the right number of checkpoints are saved - models_folder = os.path.join(temp_directory, "models") + models_folder = os.path.join(temp_directory, "checkpoints") # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) # assert that the number of files is equal to 10 @@ -134,17 +224,16 @@ def test_DE_no_chkpt_saved(temp_directory): def test_DE_run_simple_ensemble(temp_directory): noise_level = "low" - n_models = "10" - # here = os.getcwd() - # wd = self.temp_path - # os.path.dirname(here) + str(temp_directory) + '/' - wd = str(temp_directory) + "/" + n_models = 2 subprocess_args = [ "python", "src/scripts/DeepEnsemble.py", + "--noise_level", noise_level, - n_models, - wd, + "--n_models", + str(n_models), + "--out_dir", + str(temp_directory) + '/', "--n_epochs", "2", "--generatedata" @@ -152,19 +241,3 @@ def test_DE_run_simple_ensemble(temp_directory): # now run the subprocess subprocess.run(subprocess_args, check=True) - -@pytest.mark.xfail(strict=True) -def test_DE_missing_req_arg(temp_directory): - noise_level = "low" - n_models = "10" - subprocess_args = [ - "python", - "src/scripts/DeepEnsemble.py", - noise_level, - n_models, - "--n_epochs", - "2", - "--generatedata" - ] - # now run the subprocess - subprocess.run(subprocess_args, check=True) From e5dfab56ec767b08e4c6a2a6d8da7f9ec1a9288f Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 29 Apr 2024 11:27:40 -0600 Subject: [PATCH 29/31] changing default to false for save final checkpoint --- src/scripts/DeepEnsemble.py | 4 ++++ src/utils/config.py | 2 +- src/utils/defaults.py | 4 ++-- test/test_DeepEnsemble.py | 2 -- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index 85cb0ea..3b16dc7 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -296,6 +296,10 @@ def beta_type(value): "loss_type", "DE"), DEVICE) + print('save final checkpoint has this value', + config.get_item("model", + "save_final_checkpoint", + "DE")) model_ensemble = train.train_DE( trainDataLoader, x_val, diff --git a/src/utils/config.py b/src/utils/config.py index 4fd50f3..72d6090 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -15,7 +15,7 @@ def get_section(section, raise_exception=True): class Config: ENV_VAR_PATH = "DeepUQ_Config" - def __init__(self, config_path:Optional[str]=None) -> None: + def __init__(self, config_path: Optional[str]=None) -> None: # okay what Maggie is doing here is a little trick or "cheat" # where the config_path is saved to the ENV_VAR_PATH # the first time this thing is called and then later it diff --git a/src/utils/defaults.py b/src/utils/defaults.py index e190c24..df05603 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -23,7 +23,7 @@ "BETA": 0.5, "n_epochs": 100, "save_all_checkpoints": False, - "save_final_checkpoint": True, + "save_final_checkpoint": False, "overwrite_final_checkpoint": False, "plot": False, "savefig": False, @@ -79,7 +79,7 @@ "COEFF": 0.5, "n_epochs": 100, "save_all_checkpoints": False, - "save_final_checkpoint": True, + "save_final_checkpoint": False, "overwrite_final_checkpoint": False, "plot": False, "savefig": False, diff --git a/test/test_DeepEnsemble.py b/test/test_DeepEnsemble.py index 2eec0dc..4a07719 100644 --- a/test/test_DeepEnsemble.py +++ b/test/test_DeepEnsemble.py @@ -208,8 +208,6 @@ def test_DE_no_chkpt_saved(temp_directory): "--n_epochs", str(n_epochs), "--generatedata", - "--save_final_checkpoint", - "False" ] # now run the subprocess subprocess.run(subprocess_args, check=True) From b251ab7be91afab4b4ff17795ddd0285ef239144 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 29 Apr 2024 15:01:13 -0600 Subject: [PATCH 30/31] fixing flake8 --- src/data/__init__.py | 2 +- src/models/models.py | 27 ---- src/scripts/DeepEnsemble.py | 204 +++++++++++++----------- src/scripts/DeepEvidentialRegression.py | 190 ++++++++++++---------- src/train/train.py | 2 - src/utils/config.py | 14 +- src/utils/defaults.py | 71 ++++----- test/test_DeepEnsemble.py | 77 ++++----- test/test_DeepEvidentialRegression.py | 77 +++++---- 9 files changed, 337 insertions(+), 327 deletions(-) diff --git a/src/data/__init__.py b/src/data/__init__.py index b68f4a2..790f378 100644 --- a/src/data/__init__.py +++ b/src/data/__init__.py @@ -3,4 +3,4 @@ DataModules = { "MyDataLoader": MyDataLoader, "DataPreparation": DataPreparation -} \ No newline at end of file +} diff --git a/src/models/models.py b/src/models/models.py index 4b747f0..8140562 100644 --- a/src/models/models.py +++ b/src/models/models.py @@ -1,10 +1,7 @@ # Contains modules used to prepare a dataset # with varying noise properties import numpy as np -from sklearn.model_selection import train_test_split import pickle -from torch.distributions import Uniform -from torch.utils.data import TensorDataset import torch import torch.nn as nn import math @@ -251,27 +248,3 @@ def loss_bnll(mean, variance, target, beta): # beta=0.5): if beta > 0: loss = loss * (variance.detach() ** beta) return loss.sum(axis=-1) - - -''' -def get_loss(transform, beta=None): - if beta: - def beta_nll_loss(targets, outputs, beta=beta): - """Compute beta-NLL loss - """ - mu = outputs[..., 0:1] - var = transform(outputs[..., 1:2]) - loss = (K.square((targets - mu)) / var + K.log(var)) - loss = loss * K.stop_gradient(var) ** beta - return loss - return beta_nll_loss - else: - def negative_log_likelihood(targets, outputs): - """Calculate the negative loglikelihood.""" - mu = outputs[..., 0:1] - var = transform(outputs[..., 1:2]) - y = targets[..., 0:1] - loglik = - K.log(var) - K.square((y - mu)) / var - return - loglik - return negative_log_likelihood -''' \ No newline at end of file diff --git a/src/scripts/DeepEnsemble.py b/src/scripts/DeepEnsemble.py index 3b16dc7..ba45f6d 100644 --- a/src/scripts/DeepEnsemble.py +++ b/src/scripts/DeepEnsemble.py @@ -1,10 +1,11 @@ import os -import yaml +import yaml import argparse import numpy as np import torch -from torch.utils.data import TensorDataset, DataLoader -#from scripts import train, models, io +from torch.utils.data import TensorDataset, DataLoader + +# from scripts import train, models, io from train import train from models import models from data import DataModules @@ -12,9 +13,8 @@ from utils.config import Config from utils.defaults import DefaultsDE from data.data import DataPreparation, MyDataLoader -#from plots import Plots - +# from plots import Plots def parse_args(): @@ -25,34 +25,42 @@ def parse_args(): # and dumps to yaml # option to pass name of config - parser.add_argument("--config", '-c', default=None) + parser.add_argument("--config", "-c", default=None) # data info - parser.add_argument("--data_path", '-d', - default=DefaultsDE['data']['data_path'], - choices=DataModules.keys()) - parser.add_argument("--data_engine", '-dl', - default=DefaultsDE['data']['data_engine'], - choices=DataModules.keys()) + parser.add_argument( + "--data_path", + "-d", + default=DefaultsDE["data"]["data_path"], + choices=DataModules.keys(), + ) + parser.add_argument( + "--data_engine", + "-dl", + default=DefaultsDE["data"]["data_engine"], + choices=DataModules.keys(), + ) # model # path to save the model results - parser.add_argument("--out_dir", - default=DefaultsDE['common']['out_dir']) - parser.add_argument("--model_engine", '-e', - default=DefaultsDE['model']['model_engine'], - choices=ModelModules.keys()) + parser.add_argument("--out_dir", default=DefaultsDE["common"]["out_dir"]) + parser.add_argument( + "--model_engine", + "-e", + default=DefaultsDE["model"]["model_engine"], + choices=ModelModules.keys(), + ) parser.add_argument( "--size_df", type=float, required=False, - default=DefaultsDE['data']['size_df'], + default=DefaultsDE["data"]["size_df"], help="Used to load the associated .h5 data file", ) parser.add_argument( "--noise_level", type=str, - default=DefaultsDE['data']['noise_level'], + default=DefaultsDE["data"]["noise_level"], choices=["low", "medium", "high", "vhigh"], help="low, medium, high or vhigh, \ used to look up associated sigma value", @@ -61,27 +69,27 @@ def parse_args(): "--normalize", required=False, action="store_true", - default=DefaultsDE['data']['normalize'], + default=DefaultsDE["data"]["normalize"], help="If true theres an option to normalize the dataset", ) parser.add_argument( "--val_proportion", type=float, required=False, - default=DefaultsDE['data']['val_proportion'], + default=DefaultsDE["data"]["val_proportion"], help="Proportion of the dataset to use as validation", ) parser.add_argument( "--randomseed", type=int, required=False, - default=DefaultsDE['data']['randomseed'], + default=DefaultsDE["data"]["randomseed"], help="Random seed used for shuffling the training and validation set", ) parser.add_argument( "--generatedata", action="store_true", - default=DefaultsDE['data']['generatedata'], + default=DefaultsDE["data"]["generatedata"], help="option to generate df, if not specified \ default behavior is to load from file", ) @@ -89,28 +97,28 @@ def parse_args(): "--batchsize", type=int, required=False, - default=DefaultsDE['data']['batchsize'], + default=DefaultsDE["data"]["batchsize"], help="Size of batched used in the traindataloader", ) # now args for model parser.add_argument( "--n_models", type=int, - default=DefaultsDE['model']['n_models'], + default=DefaultsDE["model"]["n_models"], help="Number of MVEs in the ensemble", ) parser.add_argument( "--init_lr", type=float, required=False, - default=DefaultsDE['model']['init_lr'], + default=DefaultsDE["model"]["init_lr"], help="Learning rate", ) parser.add_argument( "--loss_type", type=str, required=False, - default=DefaultsDE['model']['loss_type'], + default=DefaultsDE["model"]["loss_type"], help="Loss types for MVE, options are no_var_loss, var_loss, \ and bnn_loss", ) @@ -118,7 +126,7 @@ def parse_args(): "--BETA", type=beta_type, required=False, - default=DefaultsDE['model']['BETA'], + default=DefaultsDE["model"]["BETA"], help="If loss_type is bnn_loss, specify a beta as a float or \ there are string options: linear_decrease, \ step_decrease_to_0.5, and step_decrease_to_1.0", @@ -127,101 +135,105 @@ def parse_args(): "--model_type", type=str, required=False, - default=DefaultsDE['model']['model_type'], + default=DefaultsDE["model"]["model_type"], help="Beginning of name for saved checkpoints and figures", ) parser.add_argument( "--n_epochs", type=int, required=False, - default=DefaultsDE['model']['n_epochs'], + default=DefaultsDE["model"]["n_epochs"], help="number of epochs for each MVE", ) parser.add_argument( "--save_all_checkpoints", action="store_true", - default=DefaultsDE['model']['save_all_checkpoints'], + default=DefaultsDE["model"]["save_all_checkpoints"], help="option to save all checkpoints", ) parser.add_argument( "--save_final_checkpoint", action="store_true", # Set to True if argument is present - default=DefaultsDE['model']['save_final_checkpoint'], + default=DefaultsDE["model"]["save_final_checkpoint"], help="option to save the final epoch checkpoint for each ensemble", ) parser.add_argument( "--overwrite_final_checkpoint", action="store_true", - default=DefaultsDE['model']['overwrite_final_checkpoint'], + default=DefaultsDE["model"]["overwrite_final_checkpoint"], help="option to overwite already saved checkpoints", ) parser.add_argument( "--plot", action="store_true", - default=DefaultsDE['model']['plot'], + default=DefaultsDE["model"]["plot"], help="option to plot in notebook", ) parser.add_argument( "--savefig", action="store_true", - default=DefaultsDE['model']['savefig'], + default=DefaultsDE["model"]["savefig"], help="option to save a figure of the true and predicted values", ) parser.add_argument( "--verbose", action="store_true", - default=DefaultsDE['model']['verbose'], + default=DefaultsDE["model"]["verbose"], help="verbose option for train", ) args = parser.parse_args() args = parser.parse_args() if args.config is not None: - print('Reading settings from config file', args.config) + print("Reading settings from config file", args.config) config = Config(args.config) else: - temp_config = DefaultsDE['common']['temp_config'] - print('Reading settings from cli and default, \ - dumping to temp config: ', - temp_config) + temp_config = DefaultsDE["common"]["temp_config"] + print( + "Reading settings from cli and default, \ + dumping to temp config: ", + temp_config, + ) os.makedirs(os.path.dirname(temp_config), exist_ok=True) # check if args were specified in cli # if not, default is from DefaultsDE dictionary input_yaml = { "common": {"out_dir": args.out_dir}, - "model": {"model_engine": args.model_engine, - "model_type": args.model_type, - "loss_type": args.loss_type, - "n_models": args.n_models, - "init_lr": args.init_lr, - "BETA": args.BETA, - "n_epochs": args.n_epochs, - "save_all_checkpoints": args.save_all_checkpoints, - "save_final_checkpoint": args.save_final_checkpoint, - "overwrite_final_checkpoint": args.overwrite_final_checkpoint, - "plot": args.plot, - "savefig": args.savefig, - "verbose": args.verbose, - }, - "data": {"data_path": args.data_path, - "data_engine": args.data_engine, - "size_df": args.size_df, - "noise_level": args.noise_level, - "val_proportion": args.val_proportion, - "randomseed": args.randomseed, - "batchsize": args.batchsize, - }, - #"plots": {key: {} for key in args.plots}, - #"metrics": {key: {} for key in args.metrics}, + "model": { + "model_engine": args.model_engine, + "model_type": args.model_type, + "loss_type": args.loss_type, + "n_models": args.n_models, + "init_lr": args.init_lr, + "BETA": args.BETA, + "n_epochs": args.n_epochs, + "save_all_checkpoints": args.save_all_checkpoints, + "save_final_checkpoint": args.save_final_checkpoint, + "overwrite_final_checkpoint": args.overwrite_final_checkpoint, + "plot": args.plot, + "savefig": args.savefig, + "verbose": args.verbose, + }, + "data": { + "data_path": args.data_path, + "data_engine": args.data_engine, + "size_df": args.size_df, + "noise_level": args.noise_level, + "val_proportion": args.val_proportion, + "randomseed": args.randomseed, + "batchsize": args.batchsize, + }, + # "plots": {key: {} for key in args.plots}, + # "metrics": {key: {} for key in args.metrics}, } yaml.dump(input_yaml, open(temp_config, "w")) config = Config(temp_config) return config - #return parser.parse_args() - + # return parser.parse_args() + def beta_type(value): if isinstance(value, float): @@ -278,28 +290,32 @@ def beta_type(value): ys_array = np.reshape(df["output"].numpy(), (len_df * len_x)) inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = DataPreparation.normalize(inputs, - ys_array, - norm) + model_inputs, model_outputs = DataPreparation.normalize( + inputs, + ys_array, + norm) x_train, x_val, y_train, y_val = DataPreparation.train_val_split( model_inputs, model_outputs, val_proportion=val_prop, random_state=rs ) trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) - trainDataLoader = DataLoader(trainData, - batch_size=BATCH_SIZE, - shuffle=True) + trainDataLoader = DataLoader( + trainData, + batch_size=BATCH_SIZE, + shuffle=True) # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - model_name = config.get_item("model", "model_type", "DE") + "_noise_" + noise - model, lossFn = models.model_setup_DE(config.get_item("model", - "loss_type", - "DE"), - DEVICE) - print('save final checkpoint has this value', - config.get_item("model", - "save_final_checkpoint", - "DE")) + model_name = config.get_item( + "model", + "model_type", + "DE") + "_noise_" + noise + model, lossFn = models.model_setup_DE( + config.get_item("model", "loss_type", "DE"), DEVICE + ) + print( + "save final checkpoint has this value", + config.get_item("model", "save_final_checkpoint", "DE"), + ) model_ensemble = train.train_DE( trainDataLoader, x_val, @@ -311,15 +327,21 @@ def beta_type(value): model_name, BETA=config.get_item("model", "BETA", "DE"), EPOCHS=config.get_item("model", "n_epochs", "DE"), - path_to_model=config.get_item("common", "out_dir", "DE"), - save_all_checkpoints=config.get_item("model", "save_all_checkpoints", - "DE"), - save_final_checkpoint=config.get_item("model", - "save_final_checkpoint", - "DE"), - overwrite_final_checkpoint=config.get_item("model", - "overwrite_final_checkpoint", - "DE"), + path_to_model=config.get_item( + "common", + "out_dir", + "DE"), + save_all_checkpoints=config.get_item( + "model", + "save_all_checkpoints", + "DE"), + save_final_checkpoint=config.get_item( + "model", + "save_final_checkpoint", + "DE"), + overwrite_final_checkpoint=config.get_item( + "model", "overwrite_final_checkpoint", "DE" + ), plot=config.get_item("model", "plot", "DE"), savefig=config.get_item("model", "savefig", "DE"), verbose=config.get_item("model", "verbose", "DE"), diff --git a/src/scripts/DeepEvidentialRegression.py b/src/scripts/DeepEvidentialRegression.py index c9d9729..5092253 100644 --- a/src/scripts/DeepEvidentialRegression.py +++ b/src/scripts/DeepEvidentialRegression.py @@ -1,10 +1,11 @@ import os -import yaml +import yaml import argparse import numpy as np import torch -from torch.utils.data import TensorDataset, DataLoader -#from scripts import train, models, io +from torch.utils.data import TensorDataset, DataLoader + +# from scripts import train, models, io from train import train from models import models from data import DataModules @@ -12,7 +13,8 @@ from utils.config import Config from utils.defaults import DefaultsDER from data.data import DataPreparation, MyDataLoader -#from plots import Plots + +# from plots import Plots def parse_args(): @@ -23,34 +25,42 @@ def parse_args(): # and dumps to yaml # option to pass name of config - parser.add_argument("--config", '-c', default=None) + parser.add_argument("--config", "-c", default=None) # data info - parser.add_argument("--data_path", '-d', - default=DefaultsDER['data']['data_path'], - choices=DataModules.keys()) - parser.add_argument("--data_engine", '-dl', - default=DefaultsDER['data']['data_engine'], - choices=DataModules.keys()) + parser.add_argument( + "--data_path", + "-d", + default=DefaultsDER["data"]["data_path"], + choices=DataModules.keys(), + ) + parser.add_argument( + "--data_engine", + "-dl", + default=DefaultsDER["data"]["data_engine"], + choices=DataModules.keys(), + ) # model - parser.add_argument("--out_dir", - default=DefaultsDER['common']['out_dir']) - parser.add_argument("--model_engine", '-e', - default=DefaultsDER['model']['model_engine'], - choices=ModelModules.keys()) + parser.add_argument("--out_dir", default=DefaultsDER["common"]["out_dir"]) + parser.add_argument( + "--model_engine", + "-e", + default=DefaultsDER["model"]["model_engine"], + choices=ModelModules.keys(), + ) parser.add_argument( "--size_df", type=float, required=False, - default=DefaultsDER['data']['size_df'], + default=DefaultsDER["data"]["size_df"], help="Used to load the associated .h5 data file", ) parser.add_argument( "--noise_level", type=str, - default=DefaultsDER['data']['noise_level'], + default=DefaultsDER["data"]["noise_level"], choices=["low", "medium", "high", "vhigh"], help="low, medium, high or vhigh, \ used to look up associated sigma value", @@ -59,27 +69,27 @@ def parse_args(): "--normalize", required=False, action="store_true", - default=DefaultsDER['data']['normalize'], + default=DefaultsDER["data"]["normalize"], help="If true theres an option to normalize the dataset", ) parser.add_argument( "--val_proportion", type=float, required=False, - default=DefaultsDER['data']['val_proportion'], + default=DefaultsDER["data"]["val_proportion"], help="Proportion of the dataset to use as validation", ) parser.add_argument( "--randomseed", type=int, required=False, - default=DefaultsDER['data']['randomseed'], + default=DefaultsDER["data"]["randomseed"], help="Random seed used for shuffling the training and validation set", ) parser.add_argument( "--generatedata", action="store_true", - default=DefaultsDER['data']['generatedata'], + default=DefaultsDER["data"]["generatedata"], help="option to generate df, if not specified \ default behavior is to load from file", ) @@ -87,78 +97,78 @@ def parse_args(): "--batchsize", type=int, required=False, - default=DefaultsDER['data']['batchsize'], + default=DefaultsDER["data"]["batchsize"], help="Size of batched used in the traindataloader", ) parser.add_argument( "--init_lr", type=float, required=False, - default=DefaultsDER['model']['init_lr'], + default=DefaultsDER["model"]["init_lr"], help="Learning rate", ) parser.add_argument( "--loss_type", type=str, required=False, - default=DefaultsDER['model']['loss_type'], + default=DefaultsDER["model"]["loss_type"], help="Loss types for DER", ) parser.add_argument( "--COEFF", type=float, required=False, - default=DefaultsDER['model']['COEFF'], + default=DefaultsDER["model"]["COEFF"], help="Coefficient for DER", ) parser.add_argument( "--model_type", type=str, required=False, - default=DefaultsDER['model']['model_type'], + default=DefaultsDER["model"]["model_type"], help="Beginning of name for saved checkpoints and figures", ) parser.add_argument( "--n_epochs", type=int, required=False, - default=DefaultsDER['model']['n_epochs'], + default=DefaultsDER["model"]["n_epochs"], help="number of epochs for each MVE", ) parser.add_argument( "--save_all_checkpoints", action="store_true", - default=DefaultsDER['model']['save_all_checkpoints'], + default=DefaultsDER["model"]["save_all_checkpoints"], help="option to save all checkpoints", ) parser.add_argument( "--save_final_checkpoint", action="store_true", # Set to True if argument is present - default=DefaultsDER['model']['save_final_checkpoint'], + default=DefaultsDER["model"]["save_final_checkpoint"], help="option to save the final epoch checkpoint for each ensemble", ) parser.add_argument( "--overwrite_final_checkpoint", action="store_true", - default=DefaultsDER['model']['overwrite_final_checkpoint'], + default=DefaultsDER["model"]["overwrite_final_checkpoint"], help="option to overwite already saved checkpoints", ) parser.add_argument( "--plot", action="store_true", - default=DefaultsDER['model']['plot'], + default=DefaultsDER["model"]["plot"], help="option to plot in notebook", ) parser.add_argument( "--savefig", action="store_true", - default=DefaultsDER['model']['savefig'], + default=DefaultsDER["model"]["savefig"], help="option to save a figure of the true and predicted values", ) parser.add_argument( "--verbose", action="store_true", - default=DefaultsDER['model']['verbose'], + default=DefaultsDER["model"]["verbose"], help="verbose option for train", ) args = parser.parse_args() @@ -166,35 +176,37 @@ def parse_args(): config = Config(args.config) else: - temp_config = DefaultsDER['common']['temp_config'] + temp_config = DefaultsDER["common"]["temp_config"] os.makedirs(os.path.dirname(temp_config), exist_ok=True) input_yaml = { "common": {"out_dir": args.out_dir}, - "model": {"model_path": args.out_dir, - "model_engine": args.model_engine, - "model_type": args.model_type, - "loss_type": args.loss_type, - "init_lr": args.init_lr, - "COEFF": args.COEFF, - "n_epochs": args.n_epochs, - "save_all_checkpoints": args.save_all_checkpoints, - "save_final_checkpoint": args.save_final_checkpoint, - "overwrite_final_checkpoint": args.overwrite_final_checkpoint, - "plot": args.plot, - "savefig": args.savefig, - "verbose": args.verbose, - }, - "data": {"data_path": args.data_path, - "data_engine": args.data_engine, - "size_df": args.size_df, - "noise_level": args.noise_level, - "val_proportion": args.val_proportion, - "randomseed": args.randomseed, - "batchsize": args.batchsize, - }, - #"plots": {key: {} for key in args.plots}, - #"metrics": {key: {} for key in args.metrics}, + "model": { + "model_path": args.out_dir, + "model_engine": args.model_engine, + "model_type": args.model_type, + "loss_type": args.loss_type, + "init_lr": args.init_lr, + "COEFF": args.COEFF, + "n_epochs": args.n_epochs, + "save_all_checkpoints": args.save_all_checkpoints, + "save_final_checkpoint": args.save_final_checkpoint, + "overwrite_final_checkpoint": args.overwrite_final_checkpoint, + "plot": args.plot, + "savefig": args.savefig, + "verbose": args.verbose, + }, + "data": { + "data_path": args.data_path, + "data_engine": args.data_engine, + "size_df": args.size_df, + "noise_level": args.noise_level, + "val_proportion": args.val_proportion, + "randomseed": args.randomseed, + "batchsize": args.batchsize, + }, + # "plots": {key: {} for key in args.plots}, + # "metrics": {key: {} for key in args.metrics}, } yaml.dump(input_yaml, open(temp_config, "w")) @@ -212,7 +224,10 @@ def parse_args(): rs = config.get_item("data", "randomseed", "DER") BATCH_SIZE = config.get_item("data", "batchsize", "DER") sigma = DataPreparation.get_sigma(noise) - print("generated data", config.get_item("data", "generatedata", "DER", raise_exception=False)) + print( + "generated data", + config.get_item("data", "generatedata", "DER", raise_exception=False), + ) if config.get_item("data", "generatedata", "DER", raise_exception=False): # generate the df data = DataPreparation() @@ -242,23 +257,28 @@ def parse_args(): xs_array = np.tile(df["inputs"].numpy(), len_df) ys_array = np.reshape(df["output"].numpy(), (len_df * len_x)) inputs = np.array([xs_array, ms_array, bs_array]).T - model_inputs, model_outputs = DataPreparation.normalize(inputs, - ys_array, - norm) + model_inputs, model_outputs = DataPreparation.normalize( + inputs, + ys_array, + norm) x_train, x_val, y_train, y_val = DataPreparation.train_val_split( model_inputs, model_outputs, val_proportion=val_prop, random_state=rs ) trainData = TensorDataset(torch.Tensor(x_train), torch.Tensor(y_train)) - trainDataLoader = DataLoader(trainData, - batch_size=BATCH_SIZE, - shuffle=True) + trainDataLoader = DataLoader( + trainData, + batch_size=BATCH_SIZE, + shuffle=True) print("[INFO] initializing the gal model...") # set the device we will be using to train the model DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") - model_name = config.get_item("model", "model_type", "DER") + "_noise_" + noise - model, lossFn = models.model_setup_DER(config.get_item("model", - "loss_type", - "DER"), DEVICE) + model_name = config.get_item( + "model", + "model_type", + "DER") + "_noise_" + noise + model, lossFn = models.model_setup_DER( + config.get_item("model", "loss_type", "DER"), DEVICE + ) model_ensemble = train.train_DER( trainDataLoader, x_val, @@ -268,24 +288,20 @@ def parse_args(): config.get_item("model", "COEFF", "DER"), config.get_item("model", "loss_type", "DER"), model_name, - EPOCHS=config.get_item("model", - "n_epochs", - "DER"), - path_to_model=config.get_item("common", - "out_dir", - "DER"), - save_all_checkpoints=config.get_item("model", - "save_all_checkpoints", - "DER"), - save_final_checkpoint=config.get_item("model", - "save_final_checkpoint", - "DER"), - overwrite_final_checkpoint=config.get_item("model", - "overwrite_final_checkpoint", - "DER"), + EPOCHS=config.get_item("model", "n_epochs", "DER"), + path_to_model=config.get_item("common", "out_dir", "DER"), + save_all_checkpoints=config.get_item( + "model", + "save_all_checkpoints", + "DER"), + save_final_checkpoint=config.get_item( + "model", + "save_final_checkpoint", + "DER"), + overwrite_final_checkpoint=config.get_item( + "model", "overwrite_final_checkpoint", "DER" + ), plot=config.get_item("model", "plot", "DER"), savefig=config.get_item("model", "savefig", "DER"), verbose=config.get_item("model", "verbose", "DER"), ) - - diff --git a/src/train/train.py b/src/train/train.py index c235c3d..5a89d97 100644 --- a/src/train/train.py +++ b/src/train/train.py @@ -1,4 +1,3 @@ -import argparse import torch import time import glob @@ -736,4 +735,3 @@ def train_DE( print(endTime - startTime) return model_ensemble - diff --git a/src/utils/config.py b/src/utils/config.py index 72d6090..fc45114 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -15,7 +15,7 @@ def get_section(section, raise_exception=True): class Config: ENV_VAR_PATH = "DeepUQ_Config" - def __init__(self, config_path: Optional[str]=None) -> None: + def __init__(self, config_path: Optional[str] = None) -> None: # okay what Maggie is doing here is a little trick or "cheat" # where the config_path is saved to the ENV_VAR_PATH # the first time this thing is called and then later it @@ -28,7 +28,10 @@ def __init__(self, config_path: Optional[str]=None) -> None: try: config_path = os.environ[self.ENV_VAR_PATH] except KeyError: - assert False, "Cannot load config from enviroment. Hint: Have you set the config path by pasing a str path to Config?" + assert False, \ + "Cannot load config from enviroment. \ + Hint: Have you set the config path \ + by passing a str path to Config?" self.config = self._read_config(config_path) self._validate_config() @@ -57,11 +60,14 @@ def get_item(self, section, item, defaulttype, raise_exception=True): "DE": DefaultsDE }[defaulttype][section][item] - def get_section(self, section, raise_exception=True): + def get_section(self, section, defaulttype, raise_exception=True): try: return self.config[section] except KeyError as e: if raise_exception: raise KeyError(e) else: - return Defaults[section] + return { + "DER": DefaultsDER, + "DE": DefaultsDE + }[defaulttype][section] diff --git a/src/utils/defaults.py b/src/utils/defaults.py index df05603..a8135b9 100644 --- a/src/utils/defaults.py +++ b/src/utils/defaults.py @@ -1,6 +1,6 @@ DefaultsDE = { - "common":{ - "out_dir":"./DeepUQResources/results/", + "common": { + "out_dir": "./DeepUQResources/results/", "temp_config": "./DeepUQResources/temp/temp_config_DE.yml", }, "data": { @@ -30,29 +30,27 @@ "verbose": False, }, "plots_common": { - "axis_spines": False, + "axis_spines": False, "tight_layout": True, - "default_colorway": "viridis", - "plot_style": "fast", - "parameter_labels" : ['$m$','$b$'], - "parameter_colors": ['#9C92A3','#0F5257'], + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels": ["$m$", "$b$"], + "parameter_colors": ["#9C92A3", "#0F5257"], "line_style_cycle": ["-", "-."], - "figure_size": [6, 6] - }, - "plots":{ - "CDFRanks":{}, - "Ranks":{"num_bins":None}, - "CoverageFraction":{} - }, + "figure_size": [6, 6], + }, + "plots": {"CDFRanks": {}, + "Ranks": {"num_bins": None}, + "CoverageFraction": {}}, "metrics_common": { "use_progress_bar": False, - "samples_per_inference":1000, - "percentiles":[75, 85, 95] + "samples_per_inference": 1000, + "percentiles": [75, 85, 95], + }, + "metrics": { + "AllSBC": {}, + "CoverageFraction": {}, }, - "metrics":{ - "AllSBC":{}, - "CoverageFraction": {}, - } } DefaultsDER = { "common": { @@ -88,26 +86,23 @@ "plots_common": { "axis_spines": False, "tight_layout": True, - "default_colorway": "viridis", - "plot_style": "fast", - "parameter_labels" : ['$m$','$b$'], - "parameter_colors": ['#9C92A3','#0F5257'], + "default_colorway": "viridis", + "plot_style": "fast", + "parameter_labels": ["$m$", "$b$"], + "parameter_colors": ["#9C92A3", "#0F5257"], "line_style_cycle": ["-", "-."], - "figure_size": [6, 6] - }, - "plots":{ - "CDFRanks":{}, - "Ranks":{"num_bins":None}, - "CoverageFraction":{} - }, + "figure_size": [6, 6], + }, + "plots": {"CDFRanks": {}, + "Ranks": {"num_bins": None}, + "CoverageFraction": {}}, "metrics_common": { "use_progress_bar": False, - "samples_per_inference":1000, - "percentiles":[75, 85, 95] + "samples_per_inference": 1000, + "percentiles": [75, 85, 95], + }, + "metrics": { + "AllSBC": {}, + "CoverageFraction": {}, }, - "metrics":{ - "AllSBC":{}, - "CoverageFraction": {}, - } } - diff --git a/test/test_DeepEnsemble.py b/test/test_DeepEnsemble.py index 4a07719..af224b1 100644 --- a/test/test_DeepEnsemble.py +++ b/test/test_DeepEnsemble.py @@ -33,35 +33,37 @@ def temp_directory(): def create_test_config(temp_directory, n_epochs): - print('dumping temp yaml') - print('temp_dir', temp_directory) + print("dumping temp yaml") + print("temp_dir", temp_directory) input_yaml = { "common": {"out_dir": str(temp_directory)}, - "model": {"model_engine": "DE", - "model_type": "DE", - "loss_type": "bnll_loss", - "init_lr": 0.001, - "BETA": 0.5, - "n_models": 2, - "n_epochs": n_epochs, - "save_all_checkpoints": False, - "save_final_checkpoint": True, - "overwrite_final_checkpoint": True, - "plot": False, - "savefig": True, - "verbose": False, - }, - "data": {"data_path": "./data", - "data_engine": "DataLoader", - "size_df": 1000, - "noise_level": "low", - "val_proportion": 0.1, - "randomseed": 42, - "batchsize": 100, - }, - } - print('theoretically dumping here', str(temp_directory)+"yamls/DE.yaml") - yaml.dump(input_yaml, open(str(temp_directory)+"yamls/DE.yaml", "w")) + "model": { + "model_engine": "DE", + "model_type": "DE", + "loss_type": "bnll_loss", + "init_lr": 0.001, + "BETA": 0.5, + "n_models": 2, + "n_epochs": n_epochs, + "save_all_checkpoints": False, + "save_final_checkpoint": True, + "overwrite_final_checkpoint": True, + "plot": False, + "savefig": True, + "verbose": False, + }, + "data": { + "data_path": "./data", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + }, + } + print("theoretically dumping here", str(temp_directory) + "yamls/DE.yaml") + yaml.dump(input_yaml, open(str(temp_directory) + "yamls/DE.yaml", "w")) def test_DE_from_config(temp_directory): @@ -69,21 +71,21 @@ def test_DE_from_config(temp_directory): # make the temporary config file n_epochs = 2 n_models = 2 - create_test_config(temp_directory+"/", n_epochs) + create_test_config(temp_directory + "/", n_epochs) subprocess_args = [ "python", "src/scripts/DeepEnsemble.py", "--config", - str(temp_directory)+"/yamls/DE.yaml", + str(temp_directory) + "/yamls/DE.yaml", ] # now run the subprocess subprocess.run(subprocess_args, check=True) # check if the right number of checkpoints are saved models_folder = os.path.join(temp_directory, "checkpoints") - print('this is the checkpoints folder', models_folder) + print("this is the checkpoints folder", models_folder) # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) - print('files in checkpoints folder', files_in_models_folder) + print("files in checkpoints folder", files_in_models_folder) # assert that the number of files is equal to 10 assert ( len(files_in_models_folder) == n_models @@ -122,12 +124,12 @@ def test_DE_chkpt_saved(temp_directory): "--n_models", str(n_models), "--out_dir", - str(temp_directory) + '/', + str(temp_directory) + "/", "--n_epochs", str(n_epochs), "--save_final_checkpoint", "--savefig", - "--generatedata" + "--generatedata", ] # now run the subprocess subprocess.run(subprocess_args, check=True) @@ -175,7 +177,7 @@ def test_DE_no_chkpt_saved_xfail(temp_directory): "--n_models", str(n_models), "--out_dir", - str(temp_directory) + '/', + str(temp_directory) + "/", "--n_epochs", str(n_epochs), "--generatedata", @@ -204,7 +206,7 @@ def test_DE_no_chkpt_saved(temp_directory): "--n_models", str(n_models), "--out_dir", - str(temp_directory) + '/', + str(temp_directory) + "/", "--n_epochs", str(n_epochs), "--generatedata", @@ -231,11 +233,10 @@ def test_DE_run_simple_ensemble(temp_directory): "--n_models", str(n_models), "--out_dir", - str(temp_directory) + '/', + str(temp_directory) + "/", "--n_epochs", "2", - "--generatedata" + "--generatedata", ] # now run the subprocess subprocess.run(subprocess_args, check=True) - diff --git a/test/test_DeepEvidentialRegression.py b/test/test_DeepEvidentialRegression.py index 6756671..5a17619 100644 --- a/test/test_DeepEvidentialRegression.py +++ b/test/test_DeepEvidentialRegression.py @@ -31,35 +31,38 @@ def temp_directory(): """ shutil.rmtree(temp_dir) + def create_test_config(temp_directory, n_epochs): - print('dumping temp yaml') - print('temp_dir', temp_directory) + print("dumping temp yaml") + print("temp_dir", temp_directory) input_yaml = { - "common": {"out_dir": str(temp_directory)},#+"results/"}, - "model": {"model_engine": "DER", - "model_type": "DER", - "loss_type": "DER", - "init_lr": 0.001, - "COEFF": 0.5, - "n_epochs": n_epochs, - "save_all_checkpoints": False, - "save_final_checkpoint": True, - "overwrite_final_checkpoint": True, - "plot": False, - "savefig": True, - "verbose": False, - }, - "data": {"data_path": "./data", - "data_engine": "DataLoader", - "size_df": 1000, - "noise_level": "low", - "val_proportion": 0.1, - "randomseed": 42, - "batchsize": 100, - }, - } - print('theoretically dumping here', str(temp_directory)+"yamls/DER.yaml") - yaml.dump(input_yaml, open(str(temp_directory)+"yamls/DER.yaml", "w")) + "common": {"out_dir": str(temp_directory)}, # +"results/"}, + "model": { + "model_engine": "DER", + "model_type": "DER", + "loss_type": "DER", + "init_lr": 0.001, + "COEFF": 0.5, + "n_epochs": n_epochs, + "save_all_checkpoints": False, + "save_final_checkpoint": True, + "overwrite_final_checkpoint": True, + "plot": False, + "savefig": True, + "verbose": False, + }, + "data": { + "data_path": "./data", + "data_engine": "DataLoader", + "size_df": 1000, + "noise_level": "low", + "val_proportion": 0.1, + "randomseed": 42, + "batchsize": 100, + }, + } + print("theoretically dumping here", str(temp_directory) + "yamls/DER.yaml") + yaml.dump(input_yaml, open(str(temp_directory) + "yamls/DER.yaml", "w")) def test_DER_chkpt_saved(temp_directory): @@ -71,12 +74,12 @@ def test_DER_chkpt_saved(temp_directory): "--noise_level", noise_level, "--out_dir", - str(temp_directory) + '/', + str(temp_directory) + "/", "--n_epochs", str(n_epochs), "--save_final_checkpoint", "--savefig", - "--generatedata" + "--generatedata", ] # now run the subprocess subprocess.run(subprocess_args, check=True) @@ -85,9 +88,8 @@ def test_DER_chkpt_saved(temp_directory): # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) # assert that the number of files is equal to 10 - assert ( - len(files_in_models_folder) == 1 - ), "Expected 1 file in the 'models' folder" + assert len(files_in_models_folder) == 1, \ + "Expected 1 file in the 'models' folder" # check if the right number of images were saved animations_folder = os.path.join(temp_directory, "images/animations") @@ -115,12 +117,12 @@ def test_DER_from_config(temp_directory): # create the test config dynamically # make the temporary config file n_epochs = 2 - create_test_config(temp_directory+"/", n_epochs) + create_test_config(temp_directory + "/", n_epochs) subprocess_args = [ "python", "src/scripts/DeepEvidentialRegression.py", "--config", - str(temp_directory)+"/yamls/DER.yaml", + str(temp_directory) + "/yamls/DER.yaml", ] # now run the subprocess subprocess.run(subprocess_args, check=True) @@ -129,10 +131,8 @@ def test_DER_from_config(temp_directory): # list all files in the "models" folder files_in_models_folder = os.listdir(models_folder) # assert that the number of files is equal to 10 - assert ( - len(files_in_models_folder) == 1 - ), "Expected 1 file in the 'models' folder" - + assert len(files_in_models_folder) == 1, \ + "Expected 1 file in the 'models' folder" # check if the right number of images were saved animations_folder = os.path.join(temp_directory, "images/animations") files_in_animations_folder = os.listdir(animations_folder) @@ -140,7 +140,6 @@ def test_DER_from_config(temp_directory): assert ( len(files_in_animations_folder) == 1 ), "Expected 1 file in the 'images/animations' folder" - # also check that all files in here have the same name elements expected_substring = "epoch_" + str(n_epochs - 1) for file_name in files_in_models_folder: From 5ea71fd86dd59d555d4f7e0ce018afaaf1e58eb1 Mon Sep 17 00:00:00 2001 From: beckynevin Date: Mon, 29 Apr 2024 15:11:37 -0600 Subject: [PATCH 31/31] adding init to src/models/ --- src/models/__init__.py | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/models/__init__.py diff --git a/src/models/__init__.py b/src/models/__init__.py new file mode 100644 index 0000000..448baa4 --- /dev/null +++ b/src/models/__init__.py @@ -0,0 +1,5 @@ +from models.models import ModelLoader + +ModelModules = { + "ModelLoader": ModelLoader +}