Browse Source

[MNT] Update Image example

tags/v0.3.2
chenzx 3 years ago
parent
commit
d76b4e7b4f
5 changed files with 42 additions and 13 deletions
  1. +1
    -1
      examples/example_image/main.py
  2. +3
    -1
      examples/example_m5/example_init.py
  3. +36
    -10
      examples/example_m5/main.py
  4. +1
    -0
      examples/example_pfs/example_init.py
  5. +1
    -1
      learnware/learnware/reuse.py

+ 1
- 1
examples/example_image/main.py View File

@@ -198,5 +198,5 @@ def test_search(gamma=0.1, load_market=True):

if __name__ == "__main__":
# prepare_data()
prepare_model()
# prepare_model()
test_search(load_market=False)

+ 3
- 1
examples/example_m5/example_init.py View File

@@ -1,13 +1,15 @@
import os
import joblib
import numpy as np
import lightgbm as lgb
from learnware.model import BaseModel


class Model(BaseModel):
def __init__(self):
super(Model, self).__init__(input_shape=(82,), output_shape=())
dir_path = os.path.dirname(os.path.abspath(__file__))
self.model = joblib.load(os.path.join(dir_path, "model.out"))
self.model = lgb.Booster(model_file=os.path.join(dir_path, "model.out"))

def fit(self, X: np.ndarray, y: np.ndarray):
pass


+ 36
- 10
examples/example_m5/main.py View File

@@ -1,13 +1,14 @@
import os
import fire
import zipfile
import numpy as np
from tqdm import tqdm
from shutil import copyfile, rmtree

import learnware
from learnware.market import EasyMarket, BaseUserInfo
from learnware.market import database_ops
from learnware.learnware import Learnware, JobSelectorReuser
from learnware.learnware import Learnware, JobSelectorReuser, AveragingReuser
import learnware.specification as specification
from m5 import DataLoader

@@ -114,7 +115,7 @@ class M5DatasetWorkflow:
rmtree(dir_path)

def test(self, regenerate_flag=False):
self.prepare_learnware(regenerate_flag)
#self.prepare_learnware(regenerate_flag)
self._init_learnware_market()

easy_market = EasyMarket()
@@ -122,10 +123,17 @@ class M5DatasetWorkflow:

m5 = DataLoader()
idx_list = m5.get_idx_list()
os.makedirs("./user_spec", exist_ok=True)
sinle_score_list = []
random_score_list = []
job_selector_score_list = []
ensemble_score_list = []

for idx in idx_list:
train_x, train_y, test_x, test_y = m5.get_idx_data(idx)
user_spec = specification.utils.generate_rkme_spec(X=test_x, gamma=0.1, cuda_idx=0)
user_spec_path = f"./user_spec/user_{idx}.json"
user_spec.save(user_spec_path)

user_info = BaseUserInfo(
id=f"user_{idx}", semantic_spec=user_senmantic, stat_info={"RKMEStatSpecification": user_spec}
@@ -141,18 +149,36 @@ class M5DatasetWorkflow:
print(
f"single model num: {len(sorted_score_list)}, max_score: {sorted_score_list[0]}, min_score: {sorted_score_list[-1]}"
)
loss_list = []
for score, learnware in zip(sorted_score_list, single_learnware_list):
pred_y = learnware.predict(test_x)
loss = m5.score(test_y, pred_y)
print(f"score: {score}, learnware_id: {learnware.id}, loss: {loss}")
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]}"
)

mixture_id = " ".join([learnware.id for learnware in mixture_learnware_list])
print(f"mixture_learnware: {mixture_id}\n")

reuse_baseline = JobSelectorReuser(learnware_list=mixture_learnware_list)
reuse_predict = reuse_baseline.predict(user_data=test_x)
reuse_score = m5.score(test_y, reuse_predict)
print(f"mixture reuse loss: {reuse_score}\n")
print(f"mixture_score: {mixture_score}, mixture_learnware: {mixture_id}")

reuse_job_selector = JobSelectorReuser(learnware_list=mixture_learnware_list)
job_selector_predict_y = reuse_job_selector.predict(user_data=test_x)
job_selector_score = m5.score(test_y, job_selector_predict_y)
print(f"mixture reuse loss (job selector): {job_selector_score}")

reuse_ensemble = AveragingReuser(learnware_list=mixture_learnware_list)
ensemble_predict_y = reuse_ensemble.predict(user_data=test_x)
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])
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"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)}")


if __name__ == "__main__":


+ 1
- 0
examples/example_pfs/example_init.py View File

@@ -6,6 +6,7 @@ from learnware.model import BaseModel

class Model(BaseModel):
def __init__(self):
super(Model, self).__init__(input_shape=(31,), output_shape=())
dir_path = os.path.dirname(os.path.abspath(__file__))
self.model = joblib.load(os.path.join(dir_path, "model.out"))



+ 1
- 1
learnware/learnware/reuse.py View File

@@ -54,7 +54,7 @@ class JobSelectorReuser(BaseReuser):

return selector_pred_y

def job_selector(self, user_data: np.ndarray, use_herding: bool):
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


Loading…
Cancel
Save