from enum import Enum from layer import Layer class StackType(Enum): Deep = "Deep", Rnn = "Rnn" class StackException(Exception): pass class Stack: def __init__(self, stack_type: StackType, name: str): self.stack_type = stack_type self.name = name self.layers: list[Layer] = [] def num_layers(self): return len(self.layers) def append(self, layer: Layer): self.layers.append(layer) return self.num_layers()-1 def remove(self, layer: Layer): for index, lay in enumerate(self.layers): if lay == layer: del(self.layers[index]) return raise StackException(f"Layer \"{layer.name}\" does not exist") def from_index(self, index : int) -> Layer: result = self.layers[index] return result def from_name(self, name: str): for layer in self.layers: if layer.name in name: return layer return None def init(self, std: float): for layer in self.layers: layer.init(std) def state_save(self): for index, layer in enumerate(self.layers): layer.save(f"{self.name}-{index}-state.npz")