|
- import numpy as np
- import torch
- import get_data
- import os
- import random
- from utils import generate_uploader, generate_user, ImageDataLoader, train
-
- from learnware.market import EasyMarket, BaseUserInfo
- from learnware.market import database_ops
- from learnware.learnware import Learnware
- import learnware.specification as specification
-
- origin_data_root = "./data/origin_data"
- processed_data_root = "./data/processed_data"
- dataset = "cifar10"
- n_uploaders = 50
- n_users = 10
- n_classes = 10
- data_root = os.path.join(origin_data_root, dataset)
- data_save_root = os.path.join(processed_data_root, dataset)
- user_save_root = os.path.join(data_save_root, "user")
- uploader_save_root = os.path.join(data_save_root, "uploader")
- model_save_root = os.path.join(data_save_root, "uploader_model")
- os.makedirs(data_root, exist_ok=True)
- os.makedirs(user_save_root, exist_ok=True)
- os.makedirs(uploader_save_root, exist_ok=True)
- os.makedirs(model_save_root, exist_ok=True)
-
-
- semantic_specs = [
- {
- "Data": {"Values": ["Tabular"], "Type": "Class"},
- "Task": {
- "Values": ["Classification"],
- "Type": "Class",
- },
- "Device": {"Values": ["GPU"], "Type": "Tag"},
- "Scenario": {"Values": ["Nature"], "Type": "Tag"},
- "Description": {"Values": "", "Type": "Description"},
- "Name": {"Values": "learnware_1", "Type": "Name"},
- },
- {
- "Data": {"Values": ["Tabular"], "Type": "Class"},
- "Task": {
- "Values": ["Classification"],
- "Type": "Class",
- },
- "Device": {"Values": ["GPU"], "Type": "Tag"},
- "Scenario": {"Values": ["Business", "Nature"], "Type": "Tag"},
- "Description": {"Values": "", "Type": "Description"},
- "Name": {"Values": "learnware_2", "Type": "Name"},
- },
- {
- "Data": {"Values": ["Tabular"], "Type": "Class"},
- "Task": {
- "Values": ["Classification"],
- "Type": "Class",
- },
- "Device": {"Values": ["GPU"], "Type": "Tag"},
- "Scenario": {"Values": ["Business"], "Type": "Tag"},
- "Description": {"Values": "", "Type": "Description"},
- "Name": {"Values": "learnware_3", "Type": "Name"},
- },
- ]
-
- user_senmantic = {
- "Data": {"Values": ["Tabular"], "Type": "Class"},
- "Task": {
- "Values": ["Classification"],
- "Type": "Class",
- },
- "Device": {"Values": ["GPU"], "Type": "Tag"},
- "Scenario": {"Values": ["Business"], "Type": "Tag"},
- "Description": {"Values": "", "Type": "Description"},
- "Name": {"Values": "", "Type": "Name"},
- }
-
-
- def prepare_data():
- if dataset == "cifar10":
- X_train, y_train, X_test, y_test = get_data.get_cifar10(data_root)
- elif dataset == "mnist":
- X_train, y_train, X_test, y_test = get_data.get_mnist(data_root)
- else:
- return
- generate_uploader(X_train, y_train, n_uploaders=n_uploaders, data_save_root=uploader_save_root)
- generate_user(X_test, y_test, n_users=n_users, data_save_root=user_save_root)
-
-
- def prepare_model():
- dataloader = ImageDataLoader(data_save_root, train=True)
- for i in range(n_uploaders):
- print("Train on uploader: %d" % (i))
- X, y = dataloader.get_idx_data(i)
- model = train(X, y, out_classes=n_classes)
- model_save_path = os.path.join(model_save_root, "uploader_%d.pth" % (i))
- torch.save(model.state_dict(), model_save_path)
- print("Model saved to '%s'" % (model_save_path))
-
-
- def prepare_learnware():
- pass
-
-
- def prepare_market():
- for i in range(n_uploaders):
- data_path = os.path.join(uploader_save_root, "uploader_%d_X.npy" % (i))
- model_path = os.path.join(model_save_root, "uploader_%d.pth" % (i))
-
-
- if __name__ == "__main__":
- prepare_data()
- prepare_model()
- prepare_market()
|