def test_addInner(self):
        """
    Test adding basic Deterministic InnerNode. 
    
    NOTE: The DeterministicNode belongs to the class of nodes that starts with a
    known final number of outputs.
    """
        print("\nTest 1: Adding InnerNode")
        try:
            builder = StaticBuilder()
            builder.addInput(10, name="In")
            enc_name = builder.addInner(3, name="In")
        except AttributeError:
            print("\nCAUGHT! Trying to assign the same name to two nodes! "
                  "AttributeError exception\n")
            builder = StaticBuilder()
            builder.addInput(10, name="In")
            enc_name = builder.addInner(3, name="Det")

        enc1 = builder.nodes[enc_name]
        print('\nNode keys in builder:', list(builder.nodes.keys()))
        print("This node's key:", enc_name)
        self.assertEqual(enc1.label, 1,
                         "The label has not been assigned correctly")
        self.assertEqual(
            builder.num_nodes, 2, "The number of nodes has not been "
            "assigned correctly")
        self.assertEqual(
            enc1.num_declared_outputs, 0, "The number of outputs of the "
            "DeterministicNode has not been assigned correctly")
        self.assertEqual(
            enc1.num_declared_inputs, 0, "The number of inputs of the "
            "DeterministicNode has not been assigned correctly")
示例#2
0
    def test_train_custom_builder(self):
        """
    """
        print("Running Test 0\n")
        x = 10.0 * np.random.randn(100, 2)
        y = x[:,
              0:1] + 1.5 * x[:,
                             1:]  # + 3*x[:,1:]**2 + 0.5*np.random.randn(100,1)
        dataset = {'train_features': x, 'train_input_response': y}

        # Define a builder.
        # More control on the directives of each node
        builder = StaticBuilder()
        enc_dirs = {
            'num_layers': 2,
            'num_nodes': 128,
            'activation': 'leaky_relu',
            'net_grow_rate': 1.0
        }
        input_dim, output_dim = 2, 1
        in0 = builder.addInput(input_dim, name="features")
        enc1 = builder.addInner(1, 10, directives=enc_dirs)
        enc2 = builder.addInner(1, output_dim, directives=enc_dirs)
        out0 = builder.addOutput(name="prediction")

        builder.addDirectedLink(in0, enc1)
        builder.addDirectedLink(enc1, enc2)
        builder.addDirectedLink(enc2, out0)

        # Pass the builder object to the Regression Model
        reg = Regression(builder=builder)
        reg.build()
        reg.visualize_model_graph("two_encoders.png")
        reg.train(dataset, num_epochs=50)
    def test_BuildModel0(self):
        """
    Test building the simplest model possible.
    """
        print("\nTest 4: Building a Basic Model")
        builder = StaticBuilder(scope="Basic")
        in_name = builder.addInput(10)
        enc_name = builder.addInner(3)
        out_name = builder.addOutput()
        builder.addDirectedLink(in_name, enc_name)
        builder.addDirectedLink(enc_name, out_name)

        self.assertEqual(
            builder.num_nodes, 3, "The number of nodes has not been "
            "assigned correctly")

        builder.build()
        inn, enc, out = (builder.nodes[in_name], builder.nodes[enc_name],
                         builder.nodes[out_name])
        self.assertEqual(inn._oslot_to_otensor[0].shape.as_list()[-1],
                         enc._islot_to_itensor[0].shape.as_list()[-1],
                         "The input tensors have not been assigned correctly")
        self.assertEqual(enc._oslot_to_otensor[0].shape.as_list()[-1],
                         out._islot_to_itensor[0].shape.as_list()[-1],
                         "The input tensors have not been assigned correctly")
    def test_addDirectedLinks(self):
        """
    Test adding DirectedLinks
    """
        print("\nTest 3: Adding DirectedLinks")
        builder = StaticBuilder()
        in1 = builder.addInput(10, name="In")
        enc1 = builder.addInner(3, name="Det")
        out1 = builder.addOutput(name="Out")

        builder.addDirectedLink(in1, enc1)
        builder.addDirectedLink(enc1, out1)

        enc1 = builder.nodes[enc1]
        print('\nNode keys in builder:', list(builder.nodes.keys()))
        self.assertEqual(
            builder.num_nodes, 3, "The number of nodes has not been "
            "assigned correctly")
        self.assertEqual(
            enc1.num_declared_outputs, 1, "The number of outputs of the "
            "DeterministicNode has not been assigned correctly")
        self.assertEqual(
            enc1.num_declared_inputs, 1, "The number of inputs of the "
            "DeterministicNode has not been assigned correctly")
        self.assertIn(
            1, builder.adj_list[0], "Node 1 has not been added to the "
            "adjacency list of Node 0")
        self.assertIn(
            2, builder.adj_list[1], "Node 2 has not been added to the "
            "adjacency list of Node 1")
示例#5
0
 def test_merge_init(self):
   """
   Test Merge Node initialization
   """
   builder = StaticBuilder(scope='Main')
   in1 = builder.addInner([[3]], num_inputs=1, node_class=NormalTriLNode)
   in2 = builder.addInner([[3]], num_inputs=1, node_class=NormalTriLNode)
   builder.addMergeNode(node_list=[in1, in2],
                        merge_class=MergeNormals)
    def test_BuildModel3(self):
        """
    Try to break it, the algorithm... !! Guess not mdrfkr.
    """
        print("\nTest 7: Building a more complicated Model")
        builder = StaticBuilder("BreakIt")
        in1 = builder.addInput(10)
        in2 = builder.addInput(20)
        enc1 = builder.addInner(3)
        enc2 = builder.addInner(5, num_islots=2)
        out1 = builder.addOutput()
        out2 = builder.addOutput()

        builder.addDirectedLink(in1, enc1)
        builder.addDirectedLink(in2, enc2, islot=0)
        builder.addDirectedLink(enc1, enc2, islot=1)
        builder.addDirectedLink(enc1, out1)
        builder.addDirectedLink(enc2, out2)

        builder.build()
示例#7
0
    def test_train_custom_builder2(self):
        """
    Build a custom Regression model whose Model graph has the rhombic design
    """
        print("Running Test 1\n")
        x = 10.0 * np.random.randn(100, 2)
        y = x[:,
              0:1] + 1.5 * x[:,
                             1:]  # + 3*x[:,1:]**2 + 0.5*np.random.randn(100,1)
        dataset = {'train_features': x, 'train_input_response': y}

        # Define a builder, control the graph
        # Like a lot more control...
        builder = StaticBuilder()
        enc_dirs = {
            'num_layers': 2,
            'num_nodes': 128,
            'activation': 'leaky_relu',
            'net_grow_rate': 1.0
        }
        input_dim = 2
        in0 = builder.addInput(input_dim, name="features")
        enc1 = builder.addInner(10, num_islots=1, directives=enc_dirs)
        enc2 = builder.addInner(10, num_islots=1, directives=enc_dirs)
        enc3 = builder.addInner(1,
                                num_islots=2,
                                num_layers=1,
                                activation='linear')
        out0 = builder.addOutput(name="prediction")

        builder.addDirectedLink(in0, enc1)
        builder.addDirectedLink(in0, enc2)
        builder.addDirectedLink(enc1, enc3, islot=0)
        builder.addDirectedLink(enc2, enc3, islot=1)
        builder.addDirectedLink(enc3, out0)

        # Pass the builder object to the Regression Model
        reg = Regression(input_dim=2, output_dim=1, builder=builder)
        reg.build()
        reg.visualize_model_graph("two_encoders.png")
        reg.train(dataset, num_epochs=50)
示例#8
0
 def declare_cell_encoder(self):
   """
   """
   if self.builder is None:
     builder = StaticBuilder(scope='Main')
   else:
     builder = self.builder
   
   enc_name = builder.addInner(self.state_dim,
                               num_inputs=2,
                               node_class=NormalTriLNode,
                               name='NormalTrilCell')
   return builder.nodes[enc_name]
    def test_addOutput(self):
        """
    Test adding basic OutputNode
    """
        print("\nTest 2: Adding OutputNode")
        builder = StaticBuilder()
        builder.addInput(10, name="In")
        builder.addInner(3, name="Det")
        o_name = builder.addOutput(name="Out")

        o1 = builder.nodes[o_name]
        print("\nNode keys in builder:", list(builder.nodes.keys()))
        print("This node's key:", o_name)
        self.assertEqual(o1.label, 2,
                         "The label has not been assigned correctly")
        self.assertEqual(
            builder.num_nodes, 3, "The number of nodes has not been "
            "assigned correctly")
        self.assertEqual(
            o1.num_declared_outputs, 0, "The number of outputs of the "
            "OutputNode has not been assigned correctly")
        self.assertEqual(
            o1.num_declared_inputs, 0, "The number of inputs of the "
            "OutputNode has not been assigned correctly")
    def test_BuildModel2(self):
        """
    Builds a model with 2 inputs. Test ConcatNode
    """
        print("\nTest 6: Building a Model with Concat")
        builder = StaticBuilder("Concat")
        in1 = builder.addInput(10)
        in2 = builder.addInput(20)
        enc1 = builder.addInner(3, num_islots=2)
        out1 = builder.addOutput()

        builder.addDirectedLink(in1, enc1, islot=0)
        builder.addDirectedLink(in2, enc1, islot=1)
        builder.addDirectedLink(enc1, out1)

        builder.build()
    def test_BuildModel1(self):
        """
    Test building a model with 2 outputs. Test Cloning an output
    """
        print("\nTest 5: Building a Model with cloning")
        builder = StaticBuilder("Clone")
        in1 = builder.addInput(10)
        enc1 = builder.addInner(3)
        out1 = builder.addOutput(name="Out1")
        out2 = builder.addOutput(name="Out2")

        builder.addDirectedLink(in1, enc1)
        builder.addDirectedLink(enc1, out1)
        builder.addDirectedLink(enc1, out2)

        builder.build()
示例#12
0
 def test_merge_build1(self):
   """
   Test Merge Node build
   """
   builder = StaticBuilder(scope='Main')
   i1 = builder.addInput([[1]])
   in1 = builder.addInner([[3]], node_class=NormalTriLNode)
   in2 = builder.addInner([[3]], node_class=NormalTriLNode)
   builder.addDirectedLink(i1, in1, islot=0)
   builder.addDirectedLink(i1, in2, islot=0)
   m1 = builder.addMergeNode([in1, in2],
                             merge_class=MergeNormals)
   builder.build()
   m1 = builder.nodes[m1]
   self.assertIn('loc', m1._oslot_to_otensor)
   self.assertIn('main', m1._oslot_to_otensor)
   self.assertIn('cov', m1._oslot_to_otensor)
示例#13
0
    def test_CallDeterministic(self):
        """
    Test Calling a DeterministicNode
    """
        print("\nTest 0: Calling a Deterministic Node")
        builder = StaticBuilder(scope="Basic")
        in_name = builder.addInput(10)
        enc_name = builder.addInner(3)
        builder.addDirectedLink(in_name, enc_name, islot=0)

        self.assertEqual(
            builder.num_nodes, 2, "The number of nodes has not been "
            "assigned correctly")
        builder.build()

        X = tf.placeholder(tf.float32, [1, 10], 'X')
        enc = builder.nodes[enc_name]
        Y = enc((X))
        print('Y', Y)
        self.assertEqual(Y.shape[-1], 3, "")