class FactorizersTest(parameterized.TestCase, tf.test.TestCase): def setUp(self): super().setUp() tf.random.set_seed(0) self.num_individuals = 100 self.num_features = 30 self.rank = 6 self.synthetizer = data.SyntheticData( num_individuals=self.num_individuals, num_features=self.num_features, low_rank=self.rank) self.matrix = self.synthetizer.make() @parameterized.parameters([ nmf.NMF(low_rank=6, num_iterations=20), qmf.QMF(low_rank=6, num_quantiles=4, epsilon=1e-2, batch_size=4), qmfq.QMFQ(low_rank=6, num_quantiles=4, epsilon=1e-2, num_nmf_updates=2), ]) def test_nmf(self, factorizer): factorizer(self.matrix, epochs=2) self.assertAllGreater(factorizer.u, 0.0) self.assertAllGreater(factorizer.v, 0.0) self.assertEqual(factorizer.u.shape, (self.num_features, self.rank)) self.assertEqual(factorizer.v.shape, (self.rank, self.num_individuals)) def test_train(self): factorizer = nmf.NMF(low_rank=6, num_iterations=20) loop = training.TrainingLoop(None, data_loader=self.synthetizer, factorizer=factorizer) loop.run(steps=2) self.assertEqual(factorizer.u.shape, (self.num_features, self.rank)) self.assertEqual(factorizer.v.shape, (self.rank, self.num_individuals))
def test_train(self): factorizer = nmf.NMF(low_rank=6, num_iterations=20) loop = training.TrainingLoop(None, data_loader=self.synthetizer, factorizer=factorizer) loop.run(steps=2) self.assertEqual(factorizer.u.shape, (self.num_features, self.rank)) self.assertEqual(factorizer.v.shape, (self.rank, self.num_individuals))
def __init__(self, low_rank: int, num_quantiles: int, num_nmf_updates: int = 100, learning_rate: float = 1e-3, optimizer: tf.optimizers.Optimizer = 'adam', **kwargs): self._low_rank = low_rank self._num_quantiles = num_quantiles self._num_nmf_updates = num_nmf_updates self._kwargs = kwargs self._learning_rate = learning_rate self._optimizer = tf.keras.optimizers.get(optimizer) self._nmf_factorizer = nmf.NMF( low_rank=self._low_rank, num_iterations=self._num_nmf_updates)