scale up model, expand vocab, collect predicted text in forward pass

- Increase H_SIZE to 128, lr to 0.2, disable Rao-Blackwell
- Expand VOCAB to include lowercase and hyphen/period
- Fix batch_delay to always use delay=1 per unit
- forward_step now returns (vc, text) with predicted char per unit step
- Collect and print generated text in main inference loop

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-05 18:17:41 +02:00
co-authored by Claude Sonnet 4.6
parent 5ac4608ba8
commit a41ddce6a8
2 changed files with 18 additions and 12 deletions
+17 -11
View File
@@ -24,19 +24,19 @@ from rbm.train import train
from rbm.status import Status
# ── Hyper-parameters ──────────────────────────────────────────────────────────
TEXT = "HALLO MAUSI! SUPER HASE!" # the character sequence to learn (matches diagram example)
TEXT = "Call me Ishmael. Some years ago" # the character sequence to learn (matches diagram example)
WIN = 3 # sliding-window width (= N in the diagram)
STRIDE = 1 # sliding-window step size
UNITS = 3
H_SIZE = 64 # hidden units per RBM cell
H_SIZE = 128 # hidden units per RBM cell
NUM_EPOCHS = 1000
NUM_ITERATIONS = 1
TRAIN_PARAMS = TrainingParams(
learning_rate = 0.1,
learning_rate = 0.2,
momentum = 0.5,
num_epochs = NUM_EPOCHS,
do_rao_blackwell = True,
do_rao_blackwell = False,
num_gibbs_samples= 1
)
#WIN=3
@@ -92,27 +92,29 @@ class RnnModel(Model):
def train(self, vc: Mat, status: Status = None):
_v, _c = split(vc, H_SIZE, axis=1)
for delay, unit in enumerate(self.units):
_vd = batch_delay(_v, delay)
for unit in self.units:
_vd = batch_delay(_v, 1)
_vc = concat(_vd, _c, axis=1)
for i in range(vc.shape[0]):
print(f"train: {unit.name}:{vc2char(_vc[i,:])}")
train(unit, _vc, status)
# For the next unit: Update context portion of vc
_c = unit.forward(_vc)
_c = unit.forward(vc)
def forward_step(self, _vc: Mat):
text = ''
for unit in self.units:
# print(f"forward_step in : {unit.name}:{vc2char(_vc)}")
_c = unit.forward(_vc)
_vc = unit.reconstruct(_c)
print(f"forward_step out: {unit.name}:{vc2char(_vc)}")
# print(f"forward_step out: {unit.name}:{vc2char(_vc)}")
text += vc2char(_vc)[WIN-1]
_v, _ = split(_vc, H_SIZE, axis=1)
_v_cl = clamp(_v.reshape([WIN, vocab_size()]), axis=1)
_v = shift_left(_v_cl.reshape([1, WIN*vocab_size()]), vocab_size())
_vc = concat(_v, _c, axis=1)
return _vc
return _vc, text
def forward(self, x: Mat):
pass
@@ -147,10 +149,14 @@ if __name__ == "__main__":
model.save()
# test the model
seed_str = 'HA'
seed_str = 'Cal'
seed_padded = seed_str + '^'*(WIN-len(seed_str))
v_test = str2vec(seed_padded).reshape([1, WIN*vocab_size()])
c_test = np.zeros([1, H_SIZE])
vc_test = concat(v_test, c_test, axis=1)
text = ''
for i in range(len(TEXT)):
vc_test = model.forward_step(vc_test)
vc_test, text_frag = model.forward_step(vc_test)
text += text_frag
print(text)
+1 -1
View File
@@ -1,6 +1,6 @@
from rbm.matrix import Mat, np
VOCAB = '^ .!?ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
VOCAB = '^ -.!?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
_CH2IDX = {ch: i for i, ch in enumerate(VOCAB)}
def clamp(vec: Mat, axis=0):