Esempio n. 1
0
    def test_withoutparams_initrandom(self):
        # Build an SPN
        feed = np.array(list(itertools.product(range(2), repeat=6)))
        model = spn.DiscreteDenseModel(
            num_classes=1, num_decomps=1, num_subsets=3,
            num_mixtures=2, weight_initializer=tf.initializers.random_uniform(0.0, 1.0))
        root1 = model.build(num_vars=6, num_vals=2)

        # Save
        path = self.out_path(self.cid() + ".spn")
        saver = spn.JSONSaver(path, pretty=True)
        saver.save(root1, save_param_vals=False)

        # Reset graph
        tf.reset_default_graph()

        # Load
        loader = spn.JSONLoader(path)
        root2 = loader.load()
        latent_indicators2 = loader.find_node('SampleIndicatorLeaf')
        init2 = spn.initialize_weights(root2)
        val_marginal2 = root2.get_value(inference_type=spn.InferenceType.MARGINAL)

        # Check model after loading
        self.assertTrue(root2.is_valid())
        with self.test_session() as sess:
            init2.run()
            out_marginal2 = sess.run(val_marginal2, feed_dict={latent_indicators2: feed})
        self.assertAlmostEqual(out_marginal2.sum(), 1.0, places=6)
Esempio n. 2
0
    def test_withparams_initrandom(self):
        # Build an SPN
        feed = np.array(list(itertools.product(range(2), repeat=6)))
        model = spn.DiscreteDenseModel(
            num_classes=1, num_decomps=1, num_subsets=3,
            num_mixtures=2, weight_init_value=spn.ValueType.RANDOM_UNIFORM(0, 1))
        root1 = model.build(num_vars=6, num_vals=2)
        init1 = spn.initialize_weights(root1)

        with tf.Session() as sess:
            # Initialize
            init1.run()

            # Save
            path = self.out_path(self.cid() + ".spn")
            saver = spn.JSONSaver(path, pretty=True)
            saver.save(root1, save_param_vals=True)

        # Reset graph
        tf.reset_default_graph()

        with tf.Session() as sess:
            # Load
            loader = spn.JSONLoader(path)
            root2 = loader.load(load_param_vals=True)
            ivs2 = loader.find_node('SampleIVs')
            val_marginal2 = root2.get_value(inference_type=spn.InferenceType.MARGINAL)

            # Check model after loading
            self.assertTrue(root2.is_valid())
            out_marginal2 = sess.run(val_marginal2, feed_dict={ivs2: feed})
            self.assertAlmostEqual(out_marginal2.sum(), 1.0, places=6)

            # Writing graph
            self.write_tf_graph(sess, self.sid(), self.cid())
    def test_discretedense_saving_3class_externallatent_indicators(self):
        model1 = spn.DiscreteDenseModel(
            num_classes=3,
            num_decomps=2,
            num_subsets=3,
            num_mixtures=2,
            input_dist=spn.DenseSPNGenerator.InputDist.MIXTURE,
            num_input_mixtures=None,
            weight_initializer=tf.initializers.random_uniform(0.0, 1.0))
        sample_latent_indicators1 = spn.IndicatorLeaf(num_vars=6, num_vals=2)
        class_latent_indicators1 = spn.IndicatorLeaf(num_vars=1, num_vals=3)
        model1.build(sample_latent_indicators1,
                     class_input=class_latent_indicators1)
        init1 = spn.initialize_weights(model1.root)

        feed_samples = list(itertools.product(range(2), repeat=6))
        feed_class = np.array([
            i for i in range(3) for _ in range(len(feed_samples))
        ]).reshape(-1, 1)
        feed_samples = np.array(feed_samples * 3)

        with self.test_session() as sess:
            # Initialize
            init1.run()

            # Save
            path = self.out_path(self.cid() + ".spn")
            model1.save_to_json(path,
                                pretty=True,
                                save_param_vals=True,
                                sess=sess)

        # Reset graph
        tf.reset_default_graph()

        with self.test_session() as sess:
            # Load
            model2 = spn.Model.load_from_json(path,
                                              load_param_vals=True,
                                              sess=sess)
            self.assertIs(type(model2), spn.DiscreteDenseModel)

            val_marginal2 = model2.root.get_value(
                inference_type=spn.InferenceType.MARGINAL)

            # Check model after loading
            self.assertTrue(model2.root.is_valid())
            out_marginal2 = sess.run(val_marginal2,
                                     feed_dict={
                                         model2.sample_inputs[0].node:
                                         feed_samples,
                                         model2.class_input.node: feed_class
                                     })
            self.assertAlmostEqual(out_marginal2.sum(), 1.0, places=6)

            # Writing graph
            self.write_tf_graph(sess, self.sid(), self.cid())
Esempio n. 4
0
 def test_discretedense_1class_internalivs(self):
     model = spn.DiscreteDenseModel(
         num_classes=1,
         num_decomps=2,
         num_subsets=3,
         num_mixtures=2,
         input_dist=spn.DenseSPNGenerator.InputDist.MIXTURE,
         num_input_mixtures=None,
         weight_init_value=spn.ValueType.RANDOM_UNIFORM(0, 1))
     root = model.build(num_vars=6, num_vals=2)
     self.generic_model_test("1class", root, model.sample_ivs, None)
 def test_discretedense_1class_internalivs(self):
     model = spn.DiscreteDenseModel(
         num_classes=1,
         num_decomps=2,
         num_subsets=3,
         num_mixtures=2,
         input_dist=spn.DenseSPNGenerator.InputDist.MIXTURE,
         num_input_mixtures=None,
         weight_initializer=tf.initializers.random_uniform(0.0, 1.0))
     root = model.build(num_vars=6, num_vals=2)
     self.generic_model_test("1class", root, model.sample_ivs, None)
 def test_discretedense_3class_externallatent_indicators(self):
     model = spn.DiscreteDenseModel(
         num_classes=3,
         num_decomps=2,
         num_subsets=3,
         num_mixtures=2,
         input_dist=spn.DenseSPNGenerator.InputDist.MIXTURE,
         num_input_mixtures=None,
         weight_initializer=tf.initializers.random_uniform(0.0, 1.0))
     sample_latent_indicators = spn.IndicatorLeaf(num_vars=6, num_vals=2)
     class_latent_indicators = spn.IndicatorLeaf(num_vars=1, num_vals=3)
     root = model.build(sample_latent_indicators,
                        class_input=class_latent_indicators)
     self.generic_model_test("3class", root, sample_latent_indicators,
                             class_latent_indicators)
Esempio n. 7
0
    def test_discretedense_saving_1class_externalivs(self):
        model1 = spn.DiscreteDenseModel(
            num_classes=1,
            num_decomps=2,
            num_subsets=3,
            num_mixtures=2,
            input_dist=spn.DenseSPNGenerator.InputDist.MIXTURE,
            num_input_mixtures=None,
            weight_init_value=spn.ValueType.RANDOM_UNIFORM(0, 1))
        sample_ivs1 = spn.IVs(num_vars=6, num_vals=2)
        model1.build(sample_ivs1)
        init1 = spn.initialize_weights(model1.root)

        feed_samples = np.array(list(itertools.product(range(2), repeat=6)))

        with tf.Session() as sess:
            # Initialize
            init1.run()

            # Save
            path = self.out_path(self.cid() + ".spn")
            model1.save_to_json(path,
                                pretty=True,
                                save_param_vals=True,
                                sess=sess)

        # Reset graph
        tf.reset_default_graph()

        with tf.Session() as sess:
            # Load
            model2 = spn.Model.load_from_json(path,
                                              load_param_vals=True,
                                              sess=sess)
            self.assertIs(type(model2), spn.DiscreteDenseModel)

            val_marginal2 = model2.root.get_value(
                inference_type=spn.InferenceType.MARGINAL)

            # Check model after loading
            self.assertTrue(model2.root.is_valid())
            out_marginal2 = sess.run(
                val_marginal2,
                feed_dict={model2.sample_inputs[0].node: feed_samples})
            self.assertAlmostEqual(out_marginal2.sum(), 1.0, places=6)

            # Writing graph
            self.write_tf_graph(sess, self.sid(), self.cid())