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)
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())
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)
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())