| @@ -8,7 +8,7 @@ from shutil import copyfile, rmtree | |||||
| import learnware | import learnware | ||||
| from learnware.market import EasyMarket, BaseUserInfo | from learnware.market import EasyMarket, BaseUserInfo | ||||
| from learnware.market import database_ops | from learnware.market import database_ops | ||||
| from learnware.learnware import Learnware, JobSelectorReuser, EnsembleReuser | |||||
| from learnware.learnware import Learnware, JobSelectorReuser, AveragingReuser | |||||
| import learnware.specification as specification | import learnware.specification as specification | ||||
| from pfs import Dataloader | from pfs import Dataloader | ||||
| @@ -163,7 +163,7 @@ class PFSDatasetWorkflow: | |||||
| job_selector_score = pfs.score(test_y, job_selector_predict_y) | job_selector_score = pfs.score(test_y, job_selector_predict_y) | ||||
| print(f"mixture reuse loss (job selector): {job_selector_score}") | print(f"mixture reuse loss (job selector): {job_selector_score}") | ||||
| reuse_ensemble = EnsembleReuser(learnware_list=mixture_learnware_list) | |||||
| reuse_ensemble = AveragingReuser(learnware_list=mixture_learnware_list) | |||||
| ensemble_predict_y = reuse_ensemble.predict(user_data=test_x) | ensemble_predict_y = reuse_ensemble.predict(user_data=test_x) | ||||
| ensemble_score = pfs.score(test_y, ensemble_predict_y) | ensemble_score = pfs.score(test_y, ensemble_predict_y) | ||||
| print(f"mixture reuse loss (ensemble): {ensemble_score}\n") | print(f"mixture reuse loss (ensemble): {ensemble_score}\n") | ||||
| @@ -6,6 +6,7 @@ from learnware.model import BaseModel | |||||
| class SVM(BaseModel): | class SVM(BaseModel): | ||||
| def __init__(self): | def __init__(self): | ||||
| super(SVM, self).__init__(input_shape=(20,), output_shape=()) | |||||
| dir_path = os.path.dirname(os.path.abspath(__file__)) | dir_path = os.path.dirname(os.path.abspath(__file__)) | ||||
| self.model = joblib.load(os.path.join(dir_path, "svm.pkl")) | self.model = joblib.load(os.path.join(dir_path, "svm.pkl")) | ||||
| @@ -161,11 +161,17 @@ class LearnwareMarketWorkflow: | |||||
| user_info = BaseUserInfo( | user_info = BaseUserInfo( | ||||
| id="user_0", semantic_spec=user_senmantic, stat_info={"RKMEStatSpecification": user_spec} | id="user_0", semantic_spec=user_senmantic, stat_info={"RKMEStatSpecification": user_spec} | ||||
| ) | ) | ||||
| sorted_score_list, single_learnware_list, mixture_learnware_list = easy_market.search_learnware(user_info) | |||||
| ( | |||||
| sorted_score_list, | |||||
| single_learnware_list, | |||||
| mixture_score, | |||||
| mixture_learnware_list, | |||||
| ) = easy_market.search_learnware(user_info) | |||||
| print(f"search result of user{idx}:") | print(f"search result of user{idx}:") | ||||
| for score, learnware in zip(sorted_score_list, single_learnware_list): | for score, learnware in zip(sorted_score_list, single_learnware_list): | ||||
| print(f"score: {score}, learnware_id: {learnware.id}") | print(f"score: {score}, learnware_id: {learnware.id}") | ||||
| print(f"mixture_score: {mixture_score}\n") | |||||
| mixture_id = " ".join([learnware.id for learnware in mixture_learnware_list]) | mixture_id = " ".join([learnware.id for learnware in mixture_learnware_list]) | ||||
| print(f"mixture_learnware: {mixture_id}\n") | print(f"mixture_learnware: {mixture_id}\n") | ||||
| @@ -2,7 +2,7 @@ import os | |||||
| import copy | import copy | ||||
| from .base import Learnware, BaseReuser | from .base import Learnware, BaseReuser | ||||
| from .reuse import JobSelectorReuser, EnsembleReuser | |||||
| from .reuse import JobSelectorReuser, AveragingReuser | |||||
| from .utils import get_stat_spec_from_config, get_model_from_config | from .utils import get_stat_spec_from_config, get_model_from_config | ||||
| from ..specification import Specification | from ..specification import Specification | ||||
| @@ -226,7 +226,7 @@ class JobSelectorReuser(BaseReuser): | |||||
| return model | return model | ||||
| class EnsembleReuser(BaseReuser): | |||||
| class AveragingReuser(BaseReuser): | |||||
| """Baseline Multiple Learnware Reuser uing Ensemble Method""" | """Baseline Multiple Learnware Reuser uing Ensemble Method""" | ||||
| def __init__(self, learnware_list: List[Learnware], mode="mean"): | def __init__(self, learnware_list: List[Learnware], mode="mean"): | ||||
| @@ -237,7 +237,7 @@ class EnsembleReuser(BaseReuser): | |||||
| learnware_list : List[Learnware] | learnware_list : List[Learnware] | ||||
| The learnware list, which should have RKME Specification for each learnweare | The learnware list, which should have RKME Specification for each learnweare | ||||
| """ | """ | ||||
| super(EnsembleReuser, self).__init__(learnware_list) | |||||
| super(AveragingReuser, self).__init__(learnware_list) | |||||
| self.mode = mode | self.mode = mode | ||||
| def predict(self, user_data: np.ndarray) -> np.ndarray: | def predict(self, user_data: np.ndarray) -> np.ndarray: | ||||
| @@ -78,12 +78,12 @@ class EasyMarket(BaseMarket): | |||||
| try: | try: | ||||
| learnware.instantiate_model() | learnware.instantiate_model() | ||||
| except Exception as e: | except Exception as e: | ||||
| logger.warning(f"The learnware [{learnware.id}] is instantiated failed! Due to {repr(e)}") | |||||
| logger.warning(f"The learnware [{learnware.id}] is instantiated failed! Due to {e}") | |||||
| return cls.NONUSABLE_LEARNWARE | return cls.NONUSABLE_LEARNWARE | ||||
| try: | try: | ||||
| learnware_model = learnware.get_model() | learnware_model = learnware.get_model() | ||||
| inputs = np.random.randn((10, *learnware_model.input_shape)) | |||||
| inputs = np.random.randn(10, *learnware_model.input_shape) | |||||
| outputs = learnware.predict(inputs) | outputs = learnware.predict(inputs) | ||||
| if outputs.shape[1:] != learnware_model.output_shape: | if outputs.shape[1:] != learnware_model.output_shape: | ||||
| logger.warning(f"The learnware [{learnware.id}] input and output dimention is error") | logger.warning(f"The learnware [{learnware.id}] input and output dimention is error") | ||||