Browse Source

Merge branch 'dev' of git.nju.edu.cn:learnware/learnware-market into dev

tags/v0.3.2
Gene 3 years ago
parent
commit
ca4a259bcd
3 changed files with 19 additions and 10 deletions
  1. +6
    -4
      examples/example_image/main.py
  2. +13
    -5
      learnware/learnware/reuse.py
  3. +0
    -1
      learnware/market/easy.py

+ 6
- 4
examples/example_image/main.py View File

@@ -167,11 +167,13 @@ def test_search(gamma=0.1, load_market=True):
acc_list.append(acc)
logger.info("search rank: %d, score: %.3f, learnware_id: %s, acc: %.3f" % (idx, score, learnware.id, acc))
# test reuse
"""
reuse_baseline = JobSelectorReuser(learnware_list=mixture_learnware_list)
reuse_predict = reuse_baseline.predict(user_data=user_data)
reuse_score = eval_prediction(reuse_predict, user_label)
job_selector_score_list.append(reuse_score)
print(f"mixture reuse loss: {reuse_score}\n")
"""

reuse_ensemble = AveragingReuser(learnware_list=mixture_learnware_list, mode="vote")
ensemble_predict_y = reuse_ensemble.predict(user_data=user_data)
@@ -186,10 +188,10 @@ def test_search(gamma=0.1, load_market=True):
% (np.mean(select_list), np.std(select_list), np.mean(avg_list), np.std(avg_list))
)
logger.info("Average performance improvement: %.3f" % (np.mean(improve_list)))
logger.info(
"Average Job Selector Reuse Performance: %.3f +/- %.3f"
% (np.mean(job_selector_score_list), np.std(job_selector_score_list))
)
# logger.info(
# "Average Job Selector Reuse Performance: %.3f +/- %.3f"
# % (np.mean(job_selector_score_list), np.std(job_selector_score_list))
# )
logger.info(
"Ensemble Reuse Performance: %.3f +/- %.3f" % (np.mean(ensemble_score_list), np.std(ensemble_score_list))
)


+ 13
- 5
learnware/learnware/reuse.py View File

@@ -17,7 +17,7 @@ logger = get_module_logger("Reuser")
class JobSelectorReuser(BaseReuser):
"""Baseline Multiple Learnware Reuser uing Job Selector Method"""

def __init__(self, learnware_list: List[Learnware], herding_num: int = 1000):
def __init__(self, learnware_list: List[Learnware], herding_num: int = 1000, use_herding: bool = True):
"""The initialization method for job selector reuser

Parameters
@@ -29,6 +29,7 @@ class JobSelectorReuser(BaseReuser):
"""
super(JobSelectorReuser, self).__init__(learnware_list)
self.herding_num = herding_num
self.use_herding = use_herding

def predict(self, user_data: np.ndarray) -> np.ndarray:
"""Give prediction for user data using baseline job-selector method
@@ -53,13 +54,15 @@ class JobSelectorReuser(BaseReuser):

return selector_pred_y

def job_selector(self, user_data: np.ndarray):
def job_selector(self, user_data: np.ndarray, use_herding: bool = True):
"""Train job selector based on user's data, which predicts which learnware in the pool should be selected

Parameters
----------
user_data : np.ndarray
User's labeled raw data.
use_herding: bool
Whether create job selector training samples by herding
"""
if len(self.learnware_list) == 1:
user_data_num = user_data.shape[0]
@@ -69,11 +72,12 @@ class JobSelectorReuser(BaseReuser):
learnware.specification.get_stat_spec_by_name("RKMEStatSpecification")
for learnware in self.learnware_list
]
task_matrix = np.zeros((len(learnware_rkme_spec_list), len(learnware_rkme_spec_list)))

task_matrix = np.zeros((len(learnware_rkme_spec_list), len(learnware_rkme_spec_list)))
for i in range(len(self.learnware_list)):
task_rkme1 = learnware_rkme_spec_list[i]
for j in range(i, len(self.learnware_list)):
task_matrix[i][i] = task_rkme1.inner_prod(task_rkme1)
for j in range(i + 1, len(self.learnware_list)):
task_rkme2 = learnware_rkme_spec_list[j]
task_matrix[i][j] = task_matrix[j][i] = task_rkme1.inner_prod(task_rkme2)

@@ -87,8 +91,12 @@ class JobSelectorReuser(BaseReuser):
task_spec = learnware_rkme_spec_list[i]
task_herding_num = max(5, int(self.herding_num * task_mixture_weight[i]))
task_val_num = task_herding_num // 5
if self.use_herding:
herding_X_i = task_spec.herding(task_herding_num).detach().cpu().numpy()
else:
herding_X_i = task_spec.z.detach().cpu().numpy()

herding_X_i = task_spec.herding(task_herding_num).detach().cpu().numpy()
train_X_i = herding_X_i[:-task_val_num]
val_X_i = herding_X_i[-task_val_num:]



+ 0
- 1
learnware/market/easy.py View File

@@ -639,7 +639,6 @@ class EasyMarket(BaseMarket):
weight_list = []
mixture_learnware_list = []

# convert dist to score
if mixture_dist is None:
sorted_score_list = self._convert_dist_to_score(sorted_dist_list)
mixture_score = None


Loading…
Cancel
Save