From 032dc4c5e94b04d8a1557e64332c55e15e36cef5 Mon Sep 17 00:00:00 2001 From: nju-xy <1582857295@qq.com> Date: Sat, 11 Nov 2023 11:59:26 +0800 Subject: [PATCH] [FIX] fix a crucial bug in _calculate_intermediate_K_and_C --- examples/dataset_pfs_workflow/main.py | 3 +-- learnware/market/easy/searcher.py | 3 +-- learnware/specification/regular/table/rkme.py | 1 + tests/test_learnware_client/test_check_learnware.py | 1 + 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/dataset_pfs_workflow/main.py b/examples/dataset_pfs_workflow/main.py index 88cbfb9..c50119d 100644 --- a/examples/dataset_pfs_workflow/main.py +++ b/examples/dataset_pfs_workflow/main.py @@ -76,8 +76,7 @@ class PFSDatasetWorkflow: semantic_spec = semantic_specs[0] semantic_spec["Name"]["Values"] = "learnware_%d" % (idx) semantic_spec["Description"]["Values"] = "test_learnware_number_%d" % (idx) - x = easy_market.add_learnware(zip_path, semantic_spec) - print(x) + easy_market.add_learnware(zip_path, semantic_spec) print("Total Item:", len(easy_market)) # curr_inds = easy_market._get_ids() diff --git a/learnware/market/easy/searcher.py b/learnware/market/easy/searcher.py index 5fb5671..73bd593 100644 --- a/learnware/market/easy/searcher.py +++ b/learnware/market/easy/searcher.py @@ -279,7 +279,6 @@ class EasyStatSearcher(BaseSearcher): weight, obj = rkme_solve_qp(K, C) weight = weight.double().to(user_rkme.device) score = user_rkme.inner_prod(user_rkme) + 2 * obj - return weight.detach().cpu().numpy().reshape(-1), score def _calculate_intermediate_K_and_C( @@ -311,7 +310,7 @@ class EasyStatSearcher(BaseSearcher): num = intermediate_K.shape[0] - 1 RKME_list = [learnware.specification.get_stat_spec_by_name(self.stat_spec_type) for learnware in learnware_list] for i in range(intermediate_K.shape[0]): - intermediate_K[num, i] = RKME_list[-1].inner_prod(RKME_list[i]) + intermediate_K[num, i] = intermediate_K[i, num] = RKME_list[-1].inner_prod(RKME_list[i]) intermediate_C[num, 0] = user_rkme.inner_prod(RKME_list[-1]) return intermediate_K, intermediate_C diff --git a/learnware/specification/regular/table/rkme.py b/learnware/specification/regular/table/rkme.py index 158a9b4..4cb4444 100644 --- a/learnware/specification/regular/table/rkme.py +++ b/learnware/specification/regular/table/rkme.py @@ -578,6 +578,7 @@ def rkme_solve_qp(K: np.ndarray, C: np.ndarray): K = K.cpu().numpy() if torch.is_tensor(C): C = C.cpu().numpy() + C = C.reshape(-1) n = K.shape[0] P = np.array(K) diff --git a/tests/test_learnware_client/test_check_learnware.py b/tests/test_learnware_client/test_check_learnware.py index 0e6fca6..36f0a81 100644 --- a/tests/test_learnware_client/test_check_learnware.py +++ b/tests/test_learnware_client/test_check_learnware.py @@ -32,3 +32,4 @@ class TestCheckLearnware(unittest.TestCase): if __name__ == "__main__": unittest.main() +