Fix GeMOSA's bugs
This commit is contained in:
		| @@ -1,8 +1,9 @@ | |||||||
| ##################################################### | ##################################################### | ||||||
| # Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.04 # | # Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.04 # | ||||||
| ##################################################### | ##################################################### | ||||||
| # python exps/GeMOSA/basic-same.py --env_version v1 --hidden_dim 16 --epochs 500 --init_lr 0.1 | # python exps/GeMOSA/basic-same.py --env_version v1 --hidden_dim 16 --epochs 500 --init_lr 0.1 --device cuda | ||||||
| # python exps/GeMOSA/basic-same.py --env_version v2 --hidden_dim 16 --epochs 1000 --init_lr 0.05 | # python exps/GeMOSA/basic-same.py --env_version v2 --hidden_dim 16 --epochs 500 --init_lr 0.1 --device cuda | ||||||
|  | # python exps/GeMOSA/basic-same.py --env_version v3 --hidden_dim 32 --epochs 1000 --init_lr 0.05 --device cuda | ||||||
| ##################################################### | ##################################################### | ||||||
| import sys, time, copy, torch, random, argparse | import sys, time, copy, torch, random, argparse | ||||||
| from tqdm import tqdm | from tqdm import tqdm | ||||||
| @@ -31,8 +32,6 @@ from xautodl.procedures.metric_utils import SaveMetric, MSEMetric, ComposeMetric | |||||||
| from xautodl.datasets.synthetic_core import get_synthetic_env | from xautodl.datasets.synthetic_core import get_synthetic_env | ||||||
| from xautodl.models.xcore import get_model | from xautodl.models.xcore import get_model | ||||||
|  |  | ||||||
| from lfna_utils import lfna_setup |  | ||||||
|  |  | ||||||
|  |  | ||||||
| def subsample(historical_x, historical_y, maxn=10000): | def subsample(historical_x, historical_y, maxn=10000): | ||||||
|     total = historical_x.size(0) |     total = historical_x.size(0) | ||||||
| @@ -44,9 +43,17 @@ def subsample(historical_x, historical_y, maxn=10000): | |||||||
|  |  | ||||||
|  |  | ||||||
| def main(args): | def main(args): | ||||||
|     logger, model_kwargs = lfna_setup(args) |     prepare_seed(args.rand_seed) | ||||||
|  |     logger = prepare_logger(args) | ||||||
|     env = get_synthetic_env(mode=None, version=args.env_version) |     env = get_synthetic_env(mode=None, version=args.env_version) | ||||||
|  |     model_kwargs = dict( | ||||||
|  |         config=dict(model_type="norm_mlp"), | ||||||
|  |         input_dim=env.meta_info["input_dim"], | ||||||
|  |         output_dim=env.meta_info["output_dim"], | ||||||
|  |         hidden_dims=[args.hidden_dim] * 2, | ||||||
|  |         act_cls="relu", | ||||||
|  |         norm_cls="layer_norm_1d", | ||||||
|  |     ) | ||||||
|     logger.log("The total enviornment: {:}".format(env)) |     logger.log("The total enviornment: {:}".format(env)) | ||||||
|     w_containers = dict() |     w_containers = dict() | ||||||
|  |  | ||||||
| @@ -149,7 +156,7 @@ if __name__ == "__main__": | |||||||
|     parser.add_argument( |     parser.add_argument( | ||||||
|         "--save_dir", |         "--save_dir", | ||||||
|         type=str, |         type=str, | ||||||
|         default="./outputs/lfna-synthetic/use-same-timestamp", |         default="./outputs/GeMOSA-synthetic/use-same-timestamp", | ||||||
|         help="The checkpoint directory.", |         help="The checkpoint directory.", | ||||||
|     ) |     ) | ||||||
|     parser.add_argument( |     parser.add_argument( | ||||||
|   | |||||||
| @@ -2,8 +2,9 @@ | |||||||
| # Learning to Generate Model One Step Ahead         # | # Learning to Generate Model One Step Ahead         # | ||||||
| ##################################################### | ##################################################### | ||||||
| # python exps/GeMOSA/main.py --env_version v1 --workers 0 | # python exps/GeMOSA/main.py --env_version v1 --workers 0 | ||||||
| # python exps/GeMOSA/main.py --env_version v1 --device cuda --lr 0.002 --seq_length 8 --meta_batch 256 | # python exps/GeMOSA/main.py --env_version v1 --device cuda --lr 0.002 --hidden_dim 16 --meta_batch 256 | ||||||
| # python exps/GeMOSA/main.py --env_version v1 --device cuda --lr 0.002 --seq_length 24 --time_dim 32 --meta_batch 128 | # python exps/GeMOSA/main.py --env_version v2 --device cuda --lr 0.002 --hidden_dim 16 --meta_batch 256 | ||||||
|  | # python exps/GeMOSA/main.py --env_version v3 --device cuda --lr 0.002 --hidden_dim 32 --meta_batch 256 | ||||||
| ##################################################### | ##################################################### | ||||||
| import sys, time, copy, torch, random, argparse | import sys, time, copy, torch, random, argparse | ||||||
| from tqdm import tqdm | from tqdm import tqdm | ||||||
| @@ -269,7 +270,7 @@ if __name__ == "__main__": | |||||||
|     parser.add_argument( |     parser.add_argument( | ||||||
|         "--save_dir", |         "--save_dir", | ||||||
|         type=str, |         type=str, | ||||||
|         default="./outputs/lfna-synthetic/lfna-battle", |         default="./outputs/GeMOSA-synthetic/GeMOSA", | ||||||
|         help="The checkpoint directory.", |         help="The checkpoint directory.", | ||||||
|     ) |     ) | ||||||
|     parser.add_argument( |     parser.add_argument( | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|         mean_generator = ConstantFunc(0) |         mean_generator = ConstantFunc(0) | ||||||
|         std_generator = ConstantFunc(1) |         std_generator = ConstantFunc(1) | ||||||
|         data_generator = GaussianDGenerator( |         data_generator = GaussianDGenerator( | ||||||
|             [mean_generator], [[std_generator]], (-2, 2) |             [mean_generator], [[std_generator]], (-3, 3) | ||||||
|         ) |         ) | ||||||
|         time_generator = TimeStamp( |         time_generator = TimeStamp( | ||||||
|             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode |             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode | ||||||
| @@ -40,7 +40,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|         mean_generator = ConstantFunc(0) |         mean_generator = ConstantFunc(0) | ||||||
|         std_generator = ConstantFunc(1) |         std_generator = ConstantFunc(1) | ||||||
|         data_generator = GaussianDGenerator( |         data_generator = GaussianDGenerator( | ||||||
|             [mean_generator], [[std_generator]], (-2, 2) |             [mean_generator], [[std_generator]], (-3, 3) | ||||||
|         ) |         ) | ||||||
|         time_generator = TimeStamp( |         time_generator = TimeStamp( | ||||||
|             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode |             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode | ||||||
| @@ -60,7 +60,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|         mean_generator = SinFunc(params={0: 1, 1: 1, 2: 0})  # sin(t) |         mean_generator = SinFunc(params={0: 1, 1: 1, 2: 0})  # sin(t) | ||||||
|         std_generator = CosFunc(params={0: 0.5, 1: 1, 2: 1})  # 0.5 cos(t) + 1 |         std_generator = CosFunc(params={0: 0.5, 1: 1, 2: 1})  # 0.5 cos(t) + 1 | ||||||
|         data_generator = GaussianDGenerator( |         data_generator = GaussianDGenerator( | ||||||
|             [mean_generator], [[std_generator]], (-2, 2) |             [mean_generator], [[std_generator]], (-3, 3) | ||||||
|         ) |         ) | ||||||
|         time_generator = TimeStamp( |         time_generator = TimeStamp( | ||||||
|             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode |             min_timestamp=0, max_timestamp=max_time, num=total_timestamp, mode=mode | ||||||
| @@ -77,6 +77,9 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio | |||||||
|         ) |         ) | ||||||
|         dynamic_env.set_regression() |         dynamic_env.set_regression() | ||||||
|     elif version.lower() == "v4": |     elif version.lower() == "v4": | ||||||
|  |         dynamic_env = SyntheticDEnv( | ||||||
|  |             data_generator, oracle_map, time_generator, num_per_task, noise=0.05 | ||||||
|  |         ) | ||||||
|         dynamic_env.set_classification(2) |         dynamic_env.set_classification(2) | ||||||
|     else: |     else: | ||||||
|         raise ValueError("Unknown version: {:}".format(version)) |         raise ValueError("Unknown version: {:}".format(version)) | ||||||
|   | |||||||
| @@ -46,15 +46,19 @@ 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["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_shape"] = self._oracle_map.output_shape( | ||||||
|         self._meta_info['output_dim'] = int(np.prod(self._meta_info["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["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_shape"] = self._oracle_map.output_shape( | ||||||
|         self._meta_info['output_dim'] = int(np.prod(self._meta_info["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