improved tests

This commit is contained in:
2026-01-09 15:28:53 +01:00
parent 4c939cab8b
commit 381ec8d0e3
2 changed files with 41 additions and 21 deletions
+39 -19
View File
@@ -1,44 +1,64 @@
import os.path
from rbm.layer import Layer
from rbm.status import Status
from rbm.train import train
from rbm.matrix import Mat, np
from rbm.entity import EntityParams, TrainingParams
from rbm.entity import Entity, EntityParams, TrainingParams
from rbm.model import Model
WORK_DIR = "../../results"
USE_OPTIMIZER = True
class TestModel(Model):
def __init__(self, name: str, work_dir: str = '.', do_gaussian_hidden=False):
super().__init__(name, work_dir)
if do_gaussian_hidden:
# Hidden gaussian
self.unit1 = Entity((3, 64), EntityParams(do_gaussian_visible=True, do_gaussian_hidden=True),
TrainingParams(learning_rate=0.01, momentum=0.9, num_epochs=1000))
else:
# Hidden binary
self.unit1 = Entity((3, 64), EntityParams(do_gaussian_visible=True, do_gaussian_hidden=False),
TrainingParams(learning_rate=0.001, momentum=0.9, num_epochs=1000))
def forward(self, x: Mat):
x = self.unit1.forward(x)
return x
def reconstruct(self, x: Mat):
x = self.unit1.reconstruct(x)
return x
def linear():
# Create params
entity_params = EntityParams(do_gaussian_visible=False, do_gaussian_hidden=False)
training_params = TrainingParams(learning_rate=0.0001, do_batch_sample=True, num_epochs=10000, momentum=0.9)
entity_params.do_rao_blackwell = False
entity_params.num_gibbs_samples = 1
work_dir = "results"
prj_name = "linear"
prj_root = "/home/jens/work/repos/Rbm"
# Create layer
layer = Layer("Layer_0", (3, 1, 0, 32), entity_params, training_params)
model = TestModel(prj_name, "results")
# Init weights
layer.init(0.01)
model.init(0.1)
# Load weights (if exists)
layer.load(os.path.join(WORK_DIR, "linear_layer0_state.npz"))
model.load()
# Prepare training data
training_batch = Mat([[0.5,0.5,1], [0.1,0.9,1.0], [0.2,0.5,0.7], [0.9,0.1,1], [0.5,0.2,0.7]], dtype=np.float64)
training_batch = (np.random.rand(150, 3, dtype=np.float64) - 0.5)
# Normalize training data
mean_training_batch = np.reshape(np.repeat(np.mean(training_batch, axis=1), 3, axis=0), training_batch.shape)
var_training_batch = np.reshape(np.repeat(np.std(training_batch, axis=1), 3, axis=0), training_batch.shape)
training_batch = (training_batch - mean_training_batch) / var_training_batch
# Train layer
train(layer.entity, training_batch, Status())
model.train(training_batch)
# Save weights
layer.save(os.path.join(WORK_DIR, "linear_layer0_state.npz"))
model.save()
# Test with test data
test_batch = training_batch
for pattern in test_batch:
h = layer.entity.forward(pattern)
v = layer.entity.reconstruct(h)
h = model.forward(pattern)
v = model.reconstruct(h)
print(f"P{pattern} : {v}")
if __name__ == "__main__":