Fix GeMOSA's bugs

This commit is contained in:
D-X-Y 2021-05-27 01:09:28 -07:00
parent 4ca38ad2ff
commit 1ce0b80776
4 changed files with 32 additions and 17 deletions

View File

@ -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(

View File

@ -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(

View File

@ -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))

View File

@ -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):