Re-organize GeMOSA
This commit is contained in:
		| @@ -33,7 +33,6 @@ from xautodl.datasets.synthetic_core import get_synthetic_env | |||||||
| from xautodl.models.xcore import get_model | from xautodl.models.xcore import get_model | ||||||
| from xautodl.xlayers import super_core, trunc_normal_ | from xautodl.xlayers import super_core, trunc_normal_ | ||||||
|  |  | ||||||
| from lfna_utils import lfna_setup, train_model, TimeData |  | ||||||
| from meta_model import MetaModelV1 | from meta_model import MetaModelV1 | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -182,7 +181,8 @@ def meta_train_procedure(base_model, meta_model, criterion, xenv, args, logger): | |||||||
|  |  | ||||||
|  |  | ||||||
| def main(args): | def main(args): | ||||||
|     logger, model_kwargs = lfna_setup(args) |     prepare_seed(args.rand_seed) | ||||||
|  |     logger = prepare_logger(args) | ||||||
|     train_env = get_synthetic_env(mode="train", version=args.env_version) |     train_env = get_synthetic_env(mode="train", version=args.env_version) | ||||||
|     valid_env = get_synthetic_env(mode="valid", version=args.env_version) |     valid_env = get_synthetic_env(mode="valid", version=args.env_version) | ||||||
|     trainval_env = get_synthetic_env(mode="trainval", version=args.env_version) |     trainval_env = get_synthetic_env(mode="trainval", version=args.env_version) | ||||||
| @@ -191,6 +191,14 @@ def main(args): | |||||||
|     logger.log("The validation enviornment: {:}".format(valid_env)) |     logger.log("The validation enviornment: {:}".format(valid_env)) | ||||||
|     logger.log("The trainval enviornment: {:}".format(trainval_env)) |     logger.log("The trainval enviornment: {:}".format(trainval_env)) | ||||||
|     logger.log("The total enviornment: {:}".format(all_env)) |     logger.log("The total enviornment: {:}".format(all_env)) | ||||||
|  |     model_kwargs = dict( | ||||||
|  |         config=dict(model_type="norm_mlp"), | ||||||
|  |         input_dim=all_env.meta_info["input_dim"], | ||||||
|  |         output_dim=all_env.meta_info["output_dim"], | ||||||
|  |         hidden_dims=[args.hidden_dim] * 2, | ||||||
|  |         act_cls="relu", | ||||||
|  |         norm_cls="layer_norm_1d", | ||||||
|  |     ) | ||||||
|  |  | ||||||
|     base_model = get_model(**model_kwargs) |     base_model = get_model(**model_kwargs) | ||||||
|     base_model = base_model.to(args.device) |     base_model = base_model.to(args.device) | ||||||
|   | |||||||
| @@ -8,20 +8,6 @@ from xautodl.procedures import prepare_seed, prepare_logger | |||||||
| from xautodl.datasets.synthetic_core import get_synthetic_env | from xautodl.datasets.synthetic_core import get_synthetic_env | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def lfna_setup(args): |  | ||||||
|     prepare_seed(args.rand_seed) |  | ||||||
|     logger = prepare_logger(args) |  | ||||||
|     model_kwargs = dict( |  | ||||||
|         config=dict(model_type="norm_mlp"), |  | ||||||
|         input_dim=1, |  | ||||||
|         output_dim=1, |  | ||||||
|         hidden_dims=[args.hidden_dim] * 2, |  | ||||||
|         act_cls="relu", |  | ||||||
|         norm_cls="layer_norm_1d", |  | ||||||
|     ) |  | ||||||
|     return logger, model_kwargs |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| def train_model(model, dataset, lr, epochs): | def train_model(model, dataset, lr, epochs): | ||||||
|     criterion = torch.nn.MSELoss() |     criterion = torch.nn.MSELoss() | ||||||
|     optimizer = torch.optim.Adam(model.parameters(), lr=lr, amsgrad=True) |     optimizer = torch.optim.Adam(model.parameters(), lr=lr, amsgrad=True) | ||||||
| @@ -40,6 +40,9 @@ class MathFunc(abc.ABC): | |||||||
|     def reset_xstr(self, xstr): |     def reset_xstr(self, xstr): | ||||||
|         self._xstr = str(xstr) |         self._xstr = str(xstr) | ||||||
|  |  | ||||||
|  |     def output_shape(self, input_shape): | ||||||
|  |         return input_shape | ||||||
|  |  | ||||||
|     @abc.abstractmethod |     @abc.abstractmethod | ||||||
|     def __call__(self, x): |     def __call__(self, x): | ||||||
|         raise NotImplementedError |         raise NotImplementedError | ||||||
|   | |||||||
| @@ -47,6 +47,9 @@ class GaussianDGenerator(DynamicGenerator): | |||||||
|     def ndim(self): |     def ndim(self): | ||||||
|         return self._ndim |         return self._ndim | ||||||
|  |  | ||||||
|  |     def output_shape(self): | ||||||
|  |         return (self._ndim,) | ||||||
|  |  | ||||||
|     def __call__(self, time, num): |     def __call__(self, time, num): | ||||||
|         mean_list = [functor(time) for functor in self._mean_functors] |         mean_list = [functor(time) for functor in self._mean_functors] | ||||||
|         cov_matrix = [ |         cov_matrix = [ | ||||||
|   | |||||||
| @@ -33,7 +33,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|             } |             } | ||||||
|         ) |         ) | ||||||
|         dynamic_env = SyntheticDEnv( |         dynamic_env = SyntheticDEnv( | ||||||
|             data_generator, oracle_map, time_generator, num_per_task |             data_generator, oracle_map, time_generator, num_per_task, noise=0.1 | ||||||
|         ) |         ) | ||||||
|         dynamic_env.set_regression() |         dynamic_env.set_regression() | ||||||
|     elif version.lower() == "v2": |     elif version.lower() == "v2": | ||||||
| @@ -53,7 +53,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|             } |             } | ||||||
|         ) |         ) | ||||||
|         dynamic_env = SyntheticDEnv( |         dynamic_env = SyntheticDEnv( | ||||||
|             data_generator, oracle_map, time_generator, num_per_task |             data_generator, oracle_map, time_generator, num_per_task, noise=0.1 | ||||||
|         ) |         ) | ||||||
|         dynamic_env.set_regression() |         dynamic_env.set_regression() | ||||||
|     elif version.lower() == "v3": |     elif version.lower() == "v3": | ||||||
| @@ -73,7 +73,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|             } |             } | ||||||
|         ) |         ) | ||||||
|         dynamic_env = SyntheticDEnv( |         dynamic_env = SyntheticDEnv( | ||||||
|             data_generator, oracle_map, time_generator, num_per_task |             data_generator, oracle_map, time_generator, num_per_task, noise=0.05 | ||||||
|         ) |         ) | ||||||
|         dynamic_env.set_regression() |         dynamic_env.set_regression() | ||||||
|     elif version.lower() == "v4": |     elif version.lower() == "v4": | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | import numpy as np | ||||||
| import torch | import torch | ||||||
| import torch.utils.data as data | import torch.utils.data as data | ||||||
|  |  | ||||||
| @@ -44,10 +45,16 @@ class SyntheticDEnv(data.Dataset): | |||||||
|  |  | ||||||
|     def set_regression(self): |     def set_regression(self): | ||||||
|         self._meta_info["task"] = "regression" |         self._meta_info["task"] = "regression" | ||||||
|  |         self._meta_info["input_dim"] = self._data_generator.ndim | ||||||
|  |         self._meta_info["output_shape"] = self._oracle_map.output_shape(self._data_generator.output_shape()) | ||||||
|  |         self._meta_info['output_dim'] = int(np.prod(self._meta_info["output_shape"])) | ||||||
|  |  | ||||||
|     def set_classification(self, num_classes): |     def set_classification(self, num_classes): | ||||||
|         self._meta_info["task"] = "classification" |         self._meta_info["task"] = "classification" | ||||||
|  |         self._meta_info["input_dim"] = self._data_generator.ndim | ||||||
|         self._meta_info["num_classes"] = int(num_classes) |         self._meta_info["num_classes"] = int(num_classes) | ||||||
|  |         self._meta_info["output_shape"] = self._oracle_map.output_shape(self._data_generator.output_shape()) | ||||||
|  |         self._meta_info['output_dim'] = int(np.prod(self._meta_info["output_shape"])) | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
|     def oracle_map(self): |     def oracle_map(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user