def test_simple_nn_using_layers(self): # Space must contain batch dimension (otherwise, NNlayer will complain). space = FloatBox(shape=(4, ), add_batch_rank=True) # Create a simple neural net from json. nn_layers = config_from_path("configs/test_simple_nn.json") neural_net = NeuralNetwork(*nn_layers["layers"]) # Do not seed, we calculate expectations manually. test = ComponentTest(component=neural_net, input_spaces=dict(inputs=space)) # Batch of size=3. input_ = space.sample(4) # Calculate output manually. var_dict = neural_net.get_variables("hidden-layer/dense/kernel", "hidden-layer/dense/bias", global_scope=False) w1_value = test.read_variable_values( var_dict["hidden-layer/dense/kernel"]) b1_value = test.read_variable_values( var_dict["hidden-layer/dense/bias"]) expected = dense_layer(input_, w1_value, b1_value) test.test(("call", input_), expected_outputs=expected, decimals=5) test.terminate()
def test_keras_style_simple_nn(self): # Input Space of the network. input_space = FloatBox(shape=(3,), add_batch_rank=True) # Create a DenseLayer with a fixed `call` method input space for the arg `inputs`. output1 = DenseLayer(units=5, activation="linear", scope="a")(input_space) # Create a DenseLayer whose `inputs` arg is the resulting DataOpRec of output1's `call` output. output2 = DenseLayer(units=7, activation="relu", scope="b")(output1) # This will trace back automatically through the given output DataOpRec(s) and add all components # on the way to the input-space to this network. neural_net = NeuralNetwork(outputs=output2) test = ComponentTest(component=neural_net, input_spaces=dict(inputs=input_space)) # Batch of size=n. input_ = input_space.sample(5) # Calculate output manually. var_dict = neural_net.get_variables("a/dense/kernel", "a/dense/bias", "b/dense/kernel", "b/dense/bias", global_scope=False) w1_value = test.read_variable_values(var_dict["a/dense/kernel"]) b1_value = test.read_variable_values(var_dict["a/dense/bias"]) w2_value = test.read_variable_values(var_dict["b/dense/kernel"]) b2_value = test.read_variable_values(var_dict["b/dense/bias"]) expected = relu(dense_layer(dense_layer(input_, w1_value, b1_value), w2_value, b2_value)) test.test(("call", input_), expected_outputs=expected, decimals=5) test.terminate()