48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
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")
|