- removed Optimizer

- refactored training
- use static seed for random (for better comparison)
- simplified StackDeep.train
This commit is contained in:
2025-12-20 20:12:19 +01:00
parent 5f5c7c6d77
commit 61c762150c
5 changed files with 30 additions and 116 deletions
+3 -19
View File
@@ -1,34 +1,18 @@
from .status import Status
from .train import train, Optimizer
from .train import train
from .stack import Stack, StackType
from .matrix import Mat, np
USE_OPTIMIZER = False
class StackDeep(Stack):
def __init__(self, name: str, work_dir: str = '.'):
Stack.__init__(self, StackType.Deep, name, work_dir)
def batch_from(self, batch: Mat, from_layer_id: int = 0):
_batch = np.copy(batch)
for index, layer in enumerate(self.layers):
if index == from_layer_id:
break
_batch = layer.entity.forward(_batch)
return _batch
def train(self, batch: Mat, status=Status()):
_batch = np.copy(batch)
for index, layer in enumerate(self.layers):
print(f"Train layer {index} for {layer.training_params.num_epochs} epochs")
if USE_OPTIMIZER:
optim = Optimizer(layer.entity, layer.training_params)
_batch = optim(_batch, status=status)
else:
_batch = self.batch_from(batch, index)
train(layer.entity, _batch, layer.training_params, status=status)
train(layer.entity, _batch, layer.training_params, status=status)
_batch = layer.entity.forward(_batch)
def pass_up(self, visible: Mat, from_layer_id: int = 0):
h = np.copy(visible)