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")