Browse Source

[ENH] add reuse method in learnware client

tags/v0.3.2
bxdd 2 years ago
parent
commit
abfcbb1ab7
4 changed files with 24 additions and 14 deletions
  1. +2
    -10
      learnware/client/container.py
  2. +13
    -0
      learnware/client/learnware_client.py
  3. +6
    -1
      learnware/learnware/base.py
  4. +3
    -3
      learnware/learnware/reuse.py

+ 2
- 10
learnware/client/container.py View File

@@ -129,19 +129,11 @@ class LearnwaresContainer:

@staticmethod
def _initialize_model_container(model: ModelEnvContainer):
try:
model.init_env_and_metadata()
except Exception as e:
logger.warning(f"fail to initialize model container, due to {e}")
pass
model.init_env_and_metadata()

@staticmethod
def _destroy_model_container(model: ModelEnvContainer):
try:
model.remove_env()
except Exception as e:
logger.warning(f"fail to destroy model container, due to {e}")
pass
model.remove_env()

def __enter__(self):
model_list = [_learnware.get_model() for _learnware in self.learnware_list]


+ 13
- 0
learnware/client/learnware_client.py View File

@@ -1,4 +1,5 @@
import os
import numpy as np
import yaml
import json
import zipfile
@@ -7,13 +8,16 @@ import requests
import tempfile
from enum import Enum
from tqdm import tqdm
from typing import List

from ..config import C
from .. import learnware
from . import package_utils
from .container import LearnwaresContainer
from ..market.easy import EasyMarket
from ..logger import get_module_logger
from ..specification import Specification
from ..learnware import BaseReuser, Learnware

CHUNK_SIZE = 1024 * 1024
logger = get_module_logger(module_name="LearnwareClient")
@@ -427,3 +431,12 @@ class LearnwareClient:

logger.info("test ok")
pass

def reuse_learnware(self, input_array: np.ndarray, learnware_list: List[Learnware], learnware_zippaths: List[str], reuser: BaseReuser):
logger.info(f"reuse learnare list {learnware_list} with reuser {reuser}")
with LearnwaresContainer(learnware_list, learnware_zippaths) as env_container:
learnware_list = env_container.get_learnware_list_with_container()
reuser.reset(learnware_list=learnware_list)
result = reuser.predict(input_array)
return result

+ 6
- 1
learnware/learnware/base.py View File

@@ -77,7 +77,7 @@ class Learnware:
class BaseReuser:
"""Providing the interfaces to reuse the learnwares which is searched by learnware"""

def __init__(self, learnware_list: List[Learnware]):
def __init__(self, learnware_list: List[Learnware] = None):
"""The initializaiton method for base reuser

Parameters
@@ -87,6 +87,11 @@ class BaseReuser:
"""
self.learnware_list = learnware_list

def reset(self, **kwargs):
for _k, _v in kwargs.items():
if hasattr(_k):
setattr(_k, _v)
def predict(self, user_data: np.ndarray) -> np.ndarray:
"""Give the final prediction for user data with reused learnware



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

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

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

Parameters
@@ -265,7 +265,7 @@ class JobSelectorReuser(BaseReuser):
class AveragingReuser(BaseReuser):
"""Baseline Multiple Learnware Reuser using Ensemble Method"""

def __init__(self, learnware_list: List[Learnware], mode: str):
def __init__(self, learnware_list: List[Learnware] = None, mode: str = 'mean'):
"""The initialization method for averaging ensemble reuser

Parameters
@@ -330,7 +330,7 @@ class EnsemblePruningReuser(BaseReuser):
References: [1] Yu-Chang Wu, Yi-Xiao He, Chao Qian, and Zhi-Hua Zhou. Multi-objective Evolutionary Ensemble Pruning Guided by Margin Distribution. In: Proceedings of the 17th International Conference on Parallel Problem Solving from Nature (PPSN'22), Dortmund, Germany, 2022.
"""

def __init__(self, learnware_list: List[Learnware], mode: str):
def __init__(self, learnware_list: List[Learnware] = None, mode: str = 'classification'):
"""The initialization method for ensemble pruning reuser

Parameters


Loading…
Cancel
Save