コード例 #1
0
ファイル: Execution.py プロジェクト: yabernar/FastBMU
class Execution:
    def __init__(self):
        self.metadata = {}
        self.dataset = {}
        self.model = {}
        self.metrics = {}

        self.data = None
        self.map = None

    def open(self, path):
        txt = codecs.open(path, 'r', encoding='utf-8').read()
        data = json.loads(txt)
        self.metadata = data["metadata"]
        self.dataset = data["dataset"]
        self.model = data["model"]
        self.metrics = data["metrics"]

    def save(self, path):
        data = {
            "metadata": self.metadata,
            "dataset": self.dataset,
            "model": self.model,
            "metrics": self.metrics
        }
        json.dump(data,
                  codecs.open(os.path.join(path,
                                           self.metadata["name"] + ".json"),
                              'w',
                              encoding='utf-8'),
                  indent=2)

    def load_dataset(self):
        if self.dataset["type"] == "Square":
            self.data = uniform(1000, 2)
        elif self.dataset["type"] == "Shape":
            self.data = shape(1000, "cat-silhouette.png")
        elif self.dataset["type"] == "Cube":
            self.data = uniform(1000, 3)
        elif self.dataset["type"] == "Colors":
            self.data = pixels_colors(1000, "Elijah.png")
        elif self.dataset["type"] == "Digits":
            self.data = spoken_digits("FSDD", 1000)
        elif self.dataset["type"] == "Image":
            self.data = mosaic_image("Elijah.png", [10, 10])
        else:
            print("Error : No dataset type specified !")

    def run(self):
        np.random.seed(self.metadata["seed"])
        if self.data is None:
            self.load_dataset()
        parameters = Parameters({
            "alpha":
            Variable(start=0.6, end=0.05, nb_steps=self.model["nb_epochs"]),
            "sigma":
            Variable(start=0.5, end=0.001, nb_steps=self.model["nb_epochs"]),
            "data":
            self.data,
            "neurons_nbr": (self.model["width"], self.model["height"]),
            "epochs_nbr":
            self.model["nb_epochs"],
            "topology":
            self.model["topology"],
            "bmu_search":
            self.model["bmu_search"]
        })
        if self.model["bmu_search"] == "Parallel":
            self.map = ParallelSOM(parameters)
            self.map.run_parallel()
        else:
            self.map = SOM(parameters)
            self.map.run()

    def compute_metrics(self):
        self.metrics = self.map.compute_metrics()

    def full_simulation(self, path):
        self.run()
        self.compute_metrics()
        self.save(path)
        print("Simulation", self.metadata["name"], "ended")