diff --git a/examples/example_m5/main.py b/examples/example_m5/main.py index a19b14a..7d4f979 100644 --- a/examples/example_m5/main.py +++ b/examples/example_m5/main.py @@ -124,7 +124,7 @@ class M5DatasetWorkflow: m5 = DataLoader() idx_list = m5.get_idx_list() os.makedirs("./user_spec", exist_ok=True) - sinle_score_list = [] + single_score_list = [] random_score_list = [] job_selector_score_list = [] ensemble_score_list = [] @@ -154,7 +154,7 @@ class M5DatasetWorkflow: pred_y = learnware.predict(test_x) loss_list.append(m5.score(test_y, pred_y)) print( - f"Top1-score: {sorted_score_list[0]}, learnware_id: {single_learnware_list[0].id}, loss: {loss_list[-1]}" + f"Top1-score: {sorted_score_list[0]}, learnware_id: {single_learnware_list[0].id}, loss: {loss_list[0]}" ) mixture_id = " ".join([learnware.id for learnware in mixture_learnware_list]) @@ -170,12 +170,12 @@ class M5DatasetWorkflow: ensemble_score = m5.score(test_y, ensemble_predict_y) print(f"mixture reuse loss (ensemble): {ensemble_score}\n") - sinle_score_list.append(loss_list[0]) + single_score_list.append(loss_list[0]) random_score_list.append(np.mean(loss_list)) job_selector_score_list.append(job_selector_score) ensemble_score_list.append(ensemble_score) - print(f"Single search score: {np.mean(sinle_score_list)}") + print(f"Single search score: {np.mean(single_score_list)}") print(f"Job selector score: {np.mean(job_selector_score_list)}") print(f"Average ensemble score: {np.mean(ensemble_score_list)}") print(f"Random search score: {np.mean(random_score_list)}") diff --git a/examples/example_pfs/main.py b/examples/example_pfs/main.py index f6038dc..25da85b 100644 --- a/examples/example_pfs/main.py +++ b/examples/example_pfs/main.py @@ -122,7 +122,7 @@ class PFSDatasetWorkflow: pfs = Dataloader() idx_list = pfs.get_idx_list() os.makedirs("./user_spec", exist_ok=True) - sinle_score_list = [] + single_score_list = [] random_score_list = [] job_selector_score_list = [] ensemble_score_list = [] @@ -152,7 +152,7 @@ class PFSDatasetWorkflow: pred_y = learnware.predict(test_x) loss_list.append(pfs.score(test_y, pred_y)) print( - f"Top1-score: {sorted_score_list[0]}, learnware_id: {single_learnware_list[0].id}, loss: {loss_list[-1]}" + f"Top1-score: {sorted_score_list[0]}, learnware_id: {single_learnware_list[0].id}, loss: {loss_list[0]}" ) mixture_id = " ".join([learnware.id for learnware in mixture_learnware_list]) @@ -168,12 +168,12 @@ class PFSDatasetWorkflow: ensemble_score = pfs.score(test_y, ensemble_predict_y) print(f"mixture reuse loss (ensemble): {ensemble_score}\n") - sinle_score_list.append(loss_list[0]) + single_score_list.append(loss_list[0]) random_score_list.append(np.mean(loss_list)) job_selector_score_list.append(job_selector_score) ensemble_score_list.append(ensemble_score) - print(f"Single search score: {np.mean(sinle_score_list)}") + print(f"Single search score: {np.mean(single_score_list)}") print(f"Job selector score: {np.mean(job_selector_score_list)}") print(f"Average ensemble score: {np.mean(ensemble_score_list)}") print(f"Random search score: {np.mean(random_score_list)}") diff --git a/learnware/learnware/reuse.py b/learnware/learnware/reuse.py index b4639a9..97ee44e 100644 --- a/learnware/learnware/reuse.py +++ b/learnware/learnware/reuse.py @@ -73,17 +73,18 @@ class JobSelectorReuser(BaseReuser): for learnware in self.learnware_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] - 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) - - task_mixture_weight = self._calculate_rkme_spec_mixture_weight( - user_data, learnware_rkme_spec_list, task_matrix - ) + if self.use_herding: + 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] + 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) + + task_mixture_weight = self._calculate_rkme_spec_mixture_weight( + user_data, learnware_rkme_spec_list, task_matrix + ) herding_X, train_herding_X, val_herding_X = None, None, None herding_y, train_herding_y, val_herding_y = [], [], [] @@ -275,7 +276,7 @@ class AveragingReuser(BaseReuser): # print(pred_y.shape) if not isinstance(pred_y, np.ndarray): pred_y = pred_y.detach().cpu().numpy() - softmax_pred = softmax(pred_y, axis=1) + softmax_pred = softmax(pred_y, axis=0) if mean_pred_y is None: mean_pred_y = softmax_pred else: