Browse Source

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

tags/v0.3.2
liuht 3 years ago
parent
commit
3a065ca55a
2 changed files with 15 additions and 19 deletions
  1. +7
    -6
      learnware/market/database_ops.py
  2. +8
    -13
      learnware/market/easy.py

+ 7
- 6
learnware/market/database_ops.py View File

@@ -18,13 +18,14 @@ def init_empty_db(func):
"""SELECT name FROM sqlite_master WHERE type='table' AND name='LEARNWARE'; """
).fetchall()
if len(listOfTables) == 0:
logger.info("Initializing Database in %s..." % (os.path.join(C.database_path, "market.db")))
logger.info("Initializing Database in %s..." % (os.path.join(C.database_path, f"market_{market_id}.db")))
cur.execute(
"""CREATE TABLE LEARNWARE
(ID CHAR(10) PRIMARY KEY NOT NULL,
SEMANTIC_SPEC TEXT NOT NULL,
ZIP_PATH TEXT NOT NULL,
FOLDER_PATH TEXT NOT NULL);"""
FOLDER_PATH TEXT NOT NULL,
USE_FLAG TEXT NOT NULL);"""
)
logger.info("Database Built!")
kwargs["cur"] = cur
@@ -49,12 +50,12 @@ def clear_learnware_table(cur):


@init_empty_db
def add_learnware_to_db(id: str, semantic_spec: dict, zip_path: str, folder_path: str, cur):
def add_learnware_to_db(id: str, semantic_spec: dict, zip_path: str, folder_path: str, use_flag: str, cur):
semantic_spec_str = json.dumps(semantic_spec)
cur.execute(
"INSERT INTO LEARNWARE (ID,SEMANTIC_SPEC,ZIP_PATH,FOLDER_PATH) \
VALUES ('%s', '%s', '%s', '%s' )"
% (id, semantic_spec_str, zip_path, folder_path)
"INSERT INTO LEARNWARE (ID,SEMANTIC_SPEC,ZIP_PATH,FOLDER_PATH,USE_FLAG) \
VALUES ('%s', '%s', '%s', '%s', '%s')"
% (id, semantic_spec_str, zip_path, folder_path, use_flag)
)




+ 8
- 13
learnware/market/easy.py View File

@@ -19,9 +19,9 @@ logger = get_module_logger("market", "INFO")


class EasyMarket(BaseMarket):
INVALID_LEARNWARE = -1
NOPREDICTION_LEARNWARE = 0
PREDICTION_LEARWARE = 1
INVALID_LEARNWARE = "INVALID"
NONUSABLE_LEARNWARE = "NONUSABLE"
USABLE_LEARWARE = "USABLE"

def __init__(self, market_id: str = "default", rebuild: bool = False):
"""Initialize Learnware Market.
@@ -79,8 +79,7 @@ class EasyMarket(BaseMarket):
learnware.instantiate_model()
except Exception as e:
logger.warning(f"The learnware [{learnware.id}] is instantiated failed! Due to {repr(e)}")
raise
return cls.INVALID_LEARNWARE
return cls.NONUSABLE_LEARNWARE

try:
spec_data = learnware.specification.stat_spec["RKMEStatSpecification"].get_z()
@@ -92,9 +91,9 @@ class EasyMarket(BaseMarket):
pred_spec = learnware.predict(spec_data)
except Exception:
logger.warning(f"The learnware [{learnware.id}] prediction is not avaliable")
return cls.NOPREDICTION_LEARNWARE
return cls.NONUSABLE_LEARNWARE

return cls.PREDICTION_LEARWARE
return cls.USABLE_LEARWARE

def add_learnware(self, zip_path: str, semantic_spec: dict) -> Tuple[str, bool]:
"""Add a learnware into the market.
@@ -188,6 +187,7 @@ class EasyMarket(BaseMarket):
semantic_spec=semantic_spec,
zip_path=target_zip_dir,
folder_path=target_folder_dir,
use_flag=check_flag,
)
return id, True
else:
@@ -292,12 +292,7 @@ class EasyMarket(BaseMarket):
sol = solvers.qp(P, q, G, h, A, b)
weight = np.array(sol["x"])
weight = torch.from_numpy(weight).reshape(-1).double().to(user_rkme.device)

term1 = user_rkme.inner_prod(user_rkme)
# print('weight:', weight.shape, 'C:', C.shape)
term2 = weight.T @ C
term3 = weight.T @ K @ weight
score = float(term1 - 2 * term2 + term3)
score = user_rkme.inner_prod(user_rkme) + sol["primal objective"]

return weight.detach().cpu().numpy().reshape(-1), score



Loading…
Cancel
Save