From 06ab8d01665163086b903db2653977ff3ebb36eb Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Thu, 4 Jun 2026 19:30:58 +0200 Subject: [PATCH] refactored forward_step --- JayRnn.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/JayRnn.py b/JayRnn.py index 9284538..3eaf860 100644 --- a/JayRnn.py +++ b/JayRnn.py @@ -24,13 +24,13 @@ from rbm.train import train from rbm.status import Status # ── Hyper-parameters ────────────────────────────────────────────────────────── -TEXT = " HALLO SUPER JENS. SUPPE! " # the character sequence to learn (matches diagram example) +TEXT = " HALLO SUPER JENS!" # the character sequence to learn (matches diagram example) WIN = 3 # sliding-window width (= N in the diagram) STRIDE = 1 # sliding-window step size UNITS = 1 H_SIZE = 128 # hidden units per RBM cell -NUM_EPOCHS = 100 -NUM_ITERATIONS = 100 +NUM_EPOCHS = 1000 +NUM_ITERATIONS = 1 TRAIN_PARAMS = TrainingParams( learning_rate = 0.25, @@ -84,11 +84,12 @@ class RnnModel(Model): _c = unit.forward(vc) vc[1:, WIN*vocab_size():] = _c[0:-1,:] - def forward_step(self, _vc: Mat): + def forward_step(self, _v: Mat, _c: Mat) -> tuple[Mat, Mat]: + _vc = concat(_v.reshape([1, WIN*vocab_size()]), _c.reshape([1, H_SIZE]), axis=1) for unit in self.units: _c = unit.forward(_vc) _vc = unit.reconstruct(_c) - return _vc + return split(_vc.flatten(), H_SIZE) def forward(self, x: Mat): pass @@ -128,10 +129,9 @@ if __name__ == "__main__": v_forward = seed.flatten() context = c_train[0] for i in range(len(TEXT)+5): - print(f"Forward {i:02d}: {vec2str(v_forward.reshape([WIN, vocab_size()]), axis=1)}") - vc_forward = concat(v_forward.reshape([1, WIN*vocab_size()]), context.reshape([1, H_SIZE]), axis=1) - vc_predict = model.forward_step(vc_forward) - v_predict, context = split(vc_predict.flatten(), H_SIZE) + v_mat = v_forward.reshape([WIN, vocab_size()]) + print(f"Forward {i:02d}: {vec2str(v_mat, axis=1)}") + v_predict, context = model.forward_step(v_mat, context) v_predict_clamp = clamp(v_predict.reshape([WIN, vocab_size()]), axis=1) print(f"Predict {i:02d}: {vec2str(v_predict_clamp, axis=1)}") v_forward = shift_left(v_predict_clamp.reshape([1, WIN*vocab_size()]), vocab_size())