Example #1
0
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))
Example #2
0
 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))
Example #3
0
 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)