Re-organize GeMOSA

This commit is contained in:
D-X-Y 2021-05-27 15:56:08 +08:00
parent 6da60664f5
commit 4ca38ad2ff
6 changed files with 26 additions and 19 deletions

View File

@ -33,7 +33,6 @@ from xautodl.datasets.synthetic_core import get_synthetic_env
from xautodl.models.xcore import get_model
from xautodl.xlayers import super_core, trunc_normal_
from lfna_utils import lfna_setup, train_model, TimeData
from meta_model import MetaModelV1
@ -182,7 +181,8 @@ def meta_train_procedure(base_model, meta_model, criterion, xenv, args, logger):
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)
valid_env = get_synthetic_env(mode="valid", 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 trainval enviornment: {:}".format(trainval_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 = base_model.to(args.device)

View File

@ -8,20 +8,6 @@ from xautodl.procedures import prepare_seed, prepare_logger
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):
criterion = torch.nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=lr, amsgrad=True)

View File

@ -40,6 +40,9 @@ class MathFunc(abc.ABC):
def reset_xstr(self, xstr):
self._xstr = str(xstr)
def output_shape(self, input_shape):
return input_shape
@abc.abstractmethod
def __call__(self, x):
raise NotImplementedError

View File

@ -47,6 +47,9 @@ class GaussianDGenerator(DynamicGenerator):
def ndim(self):
return self._ndim
def output_shape(self):
return (self._ndim,)
def __call__(self, time, num):
mean_list = [functor(time) for functor in self._mean_functors]
cov_matrix = [

View File

@ -33,7 +33,7 @@ def get_synthetic_env(total_timestamp=1600, num_per_task=1000, mode=None, versio
}
)
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()
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(
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()
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(
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()
elif version.lower() == "v4":

View File

@ -1,3 +1,4 @@
import numpy as np
import torch
import torch.utils.data as data
@ -44,10 +45,16 @@ class SyntheticDEnv(data.Dataset):
def set_regression(self):
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):
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["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
def oracle_map(self):