Esempio n. 1
0
    def test_get_psd_product(self):
        # Function to test implicit product with PSD matrix.
        net_weights = [[[2, 2], [3, 3], [4, 4]], [[1, 1, 1], [-1, -1, -1]]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0])),
        ]
        net_layer_types = ["ff_relu", "ff"]
        nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        test_input = np.transpose(np.matrix([0, 0]))
        true_class = 0
        adv_class = 1
        input_minval = 0
        input_maxval = 0
        epsilon = 0.1
        three_dim_tensor = tf.random_uniform(shape=(3, 1), dtype=tf.float32)
        two_dim_tensor = tf.random_uniform(shape=(2, 1), dtype=tf.float32)
        scalar = tf.random_uniform(shape=(1, 1), dtype=tf.float32)
        lambda_pos = [two_dim_tensor, three_dim_tensor]
        lambda_neg = lambda_pos
        lambda_quad = lambda_pos
        lambda_lu = lambda_pos
        nu = scalar
        dual_var = {
            "lambda_pos": lambda_pos,
            "lambda_neg": lambda_neg,
            "lambda_quad": lambda_quad,
            "lambda_lu": lambda_lu,
            "nu": nu,
        }
        with tf.Session() as sess:
            dual_formulation_object = dual_formulation.DualFormulation(
                sess,
                dual_var,
                nn_params1,
                test_input,
                true_class,
                adv_class,
                input_minval,
                input_maxval,
                epsilon,
            )
            _, matrix_m = dual_formulation_object.get_full_psd_matrix()

            # Testing if the values match
            six_dim_tensor = tf.random_uniform(shape=(6, 1), dtype=tf.float32)
            implicit_product = dual_formulation_object.get_psd_product(
                six_dim_tensor)
            explicit_product = tf.matmul(matrix_m, six_dim_tensor)
            [implicit_product_value, explicit_product_value
             ] = sess.run([implicit_product, explicit_product])
            self.assertEqual(np.shape(implicit_product_value),
                             np.shape(explicit_product_value))
            self.assertLess(
                np.max(np.abs(implicit_product_value -
                              explicit_product_value)), 1e-5)
  def prepare_dual_object(self):
    # Function to prepare dual object to be used for testing optimization.
    net_weights = [[[2, 2], [3, 3], [4, 4]], [[1, 1, 1], [-1, -1, -1]]]
    net_biases = [
        np.transpose(np.matrix([0, 0, 0])),
        np.transpose(np.matrix([0, 0]))
    ]
    net_layer_types = ['ff_relu', 'ff']
    nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

    test_input = np.transpose(np.matrix([0, 0]))
    true_class = 0
    adv_class = 1
    input_minval = 0
    input_maxval = 0
    epsilon = 0.1

    # Creating dual variables to use for optimization
    lambda_pos = [tf.get_variable('lambda_pos0',
                                  initializer=np.random.uniform(
                                      0, 0.1, size=(2, 1)).astype(np.float32)),
                  tf.get_variable('lambda_pos1',
                                  initializer=np.random.uniform(
                                      0, 0.1, size=(3, 1)).astype(np.float32))]
    lambda_neg = [tf.get_variable('lambda_neg0',
                                  initializer=np.random.uniform(
                                      0, 0.1, size=(2, 1)).astype(np.float32)),
                  tf.get_variable('lambda_neg1',
                                  initializer=np.random.uniform(
                                      0, 0.1, size=(3, 1)).astype(np.float32))]
    lambda_quad = [tf.get_variable('lambda_quad0',
                                   initializer=np.random.uniform(
                                       0, 0.1, size=(2, 1)).astype(np.float32)),
                   tf.get_variable('lambda_quad1',
                                   initializer=np.random.uniform(
                                       0, 0.1, size=(3, 1)).astype(np.float32))]
    lambda_lu = [tf.get_variable('lambda_lu0',
                                 initializer=np.random.uniform(
                                     0, 0.1, size=(2, 1)).astype(np.float32)),
                 tf.get_variable('lambda_lu1',
                                 initializer=np.random.uniform(
                                     0, 0.1, size=(3, 1)).astype(np.float32))]
    nu = tf.reshape(tf.get_variable('nu', initializer=200.0,
                                    dtype=tf.float32), shape=(1, 1))
    dual_var = {'lambda_pos': lambda_pos, 'lambda_neg': lambda_neg,
                'lambda_quad': lambda_quad, 'lambda_lu': lambda_lu, 'nu': nu}
    sess = tf.Session()
    dual_formulation_object = dual_formulation.DualFormulation(sess,
                                                               dual_var,
                                                               nn_params1,
                                                               test_input,
                                                               true_class,
                                                               adv_class,
                                                               input_minval,
                                                               input_maxval,
                                                               epsilon)
    return sess, dual_formulation_object
Esempio n. 3
0
    def test_init(self):
        # Function to test initialization of NeuralNetParams object.
        # Valid params
        net_weights = [[[2, 2], [3, 3], [4, 4]], [1, 1, 1]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0]))
        ]
        net_layer_types = ['ff_relu', 'ff']
        nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        self.assertIsNotNone(nn_params1)
        # Invalid params : list length
        net_biases = [0]
        with self.assertRaises(ValueError):
            nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        # Invalid params: layer types
        with self.assertRaises(ValueError):
            net_layer_types = ['ff_relu', 'ff_relu']
            nn.NeuralNetwork(net_weights, net_biases, net_layer_types)
Esempio n. 4
0
    def test_set_differentiable_objective(self):
        # Function to test the function that sets the differentiable objective.
        net_weights = [[[2, 2], [3, 3], [4, 4]], [[1, 1, 1], [-1, -1, -1]]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0])),
        ]
        net_layer_types = ["ff_relu", "ff"]
        nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        test_input = np.transpose(np.matrix([0, 0]))
        true_class = 0
        adv_class = 1
        input_minval = 0
        input_maxval = 0
        epsilon = 0.1
        three_dim_tensor = tf.random_uniform(shape=(3, 1), dtype=tf.float32)
        two_dim_tensor = tf.random_uniform(shape=(2, 1), dtype=tf.float32)
        scalar = tf.random_uniform(shape=(1, 1), dtype=tf.float32)
        lambda_pos = [two_dim_tensor, three_dim_tensor]
        lambda_neg = lambda_pos
        lambda_quad = lambda_pos
        lambda_lu = lambda_pos
        nu = scalar
        dual_var = {
            "lambda_pos": lambda_pos,
            "lambda_neg": lambda_neg,
            "lambda_quad": lambda_quad,
            "lambda_lu": lambda_lu,
            "nu": nu,
        }
        with tf.Session() as sess:
            dual_formulation_object = dual_formulation.DualFormulation(
                sess,
                dual_var,
                nn_params1,
                test_input,
                true_class,
                adv_class,
                input_minval,
                input_maxval,
                epsilon,
            )
        dual_formulation_object.set_differentiable_objective()
        self.assertEqual(dual_formulation_object.scalar_f.shape.as_list(), [1])
        self.assertEqual(
            dual_formulation_object.unconstrained_objective.shape.as_list(),
            [1, 1])
        self.assertEqual(dual_formulation_object.vector_g.shape.as_list(),
                         [5, 1])
Esempio n. 5
0
    def test_get_full_psd_matrix(self):
        # Function to test product with PSD matrix.
        net_weights = [[[2, 2], [3, 3], [4, 4]], [[1, 1, 1], [-1, -1, -1]]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0])),
        ]
        net_layer_types = ["ff_relu", "ff"]
        nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        test_input = np.transpose(np.matrix([0, 0]))
        true_class = 0
        adv_class = 1
        input_minval = 0
        input_maxval = 0
        epsilon = 0.1
        three_dim_tensor = tf.random_uniform(shape=(3, 1), dtype=tf.float32)
        two_dim_tensor = tf.random_uniform(shape=(2, 1), dtype=tf.float32)
        scalar = tf.random_uniform(shape=(1, 1), dtype=tf.float32)
        lambda_pos = [two_dim_tensor, three_dim_tensor]
        lambda_neg = lambda_pos
        lambda_quad = lambda_pos
        lambda_lu = lambda_pos
        nu = scalar
        dual_var = {
            "lambda_pos": lambda_pos,
            "lambda_neg": lambda_neg,
            "lambda_quad": lambda_quad,
            "lambda_lu": lambda_lu,
            "nu": nu,
        }
        with tf.Session() as sess:
            dual_formulation_object = dual_formulation.DualFormulation(
                sess,
                dual_var,
                nn_params1,
                test_input,
                true_class,
                adv_class,
                input_minval,
                input_maxval,
                epsilon,
            )
        matrix_h, matrix_m = dual_formulation_object.get_full_psd_matrix()
        self.assertEqual(matrix_h.shape.as_list(), [5, 5])
        self.assertEqual(matrix_m.shape.as_list(), [6, 6])
Esempio n. 6
0
    def test_init(self):
        # Function to test initialization of dual formulation class.
        net_weights = [[[2, 2], [3, 3], [4, 4]], [[1, 1, 1], [-1, -1, -1]]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0])),
        ]
        net_layer_types = ["ff_relu", "ff"]
        nn_params1 = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        test_input = np.transpose(np.matrix([0, 0]))
        true_class = 0
        adv_class = 1
        input_minval = 0
        input_maxval = 0
        epsilon = 0.1
        three_dim_tensor = tf.random_uniform(shape=(3, 1), dtype=tf.float32)
        two_dim_tensor = tf.random_uniform(shape=(2, 1), dtype=tf.float32)
        scalar = tf.random_uniform(shape=(1, 1), dtype=tf.float32)
        lambda_pos = [two_dim_tensor, three_dim_tensor]
        lambda_neg = lambda_pos
        lambda_quad = lambda_pos
        lambda_lu = lambda_pos
        nu = scalar
        dual_var = {
            "lambda_pos": lambda_pos,
            "lambda_neg": lambda_neg,
            "lambda_quad": lambda_quad,
            "lambda_lu": lambda_lu,
            "nu": nu,
        }
        with tf.Session() as sess:
            dual_formulation_object = dual_formulation.DualFormulation(
                sess,
                dual_var,
                nn_params1,
                test_input,
                true_class,
                adv_class,
                input_minval,
                input_maxval,
                epsilon,
            )
        self.assertIsNotNone(dual_formulation_object)
Esempio n. 7
0
    def test_forward_pass(self):
        # Function to test forward pass of nn_params.
        net_weights = [[[2, 2], [3, 3], [4, 4]], [1, 1, 1]]
        net_biases = [
            np.transpose(np.matrix([0, 0, 0])),
            np.transpose(np.matrix([0, 0]))
        ]
        net_layer_types = ['ff_relu', 'ff']
        nn_params = nn.NeuralNetwork(net_weights, net_biases, net_layer_types)

        input_vector = tf.random_uniform(shape=(2, 1), dtype=tf.float32)
        output_vector = nn_params.forward_pass(input_vector, 0)
        self.assertEqual(output_vector.shape.as_list(), [3, 1])
        output_vector_2 = nn_params.forward_pass(input_vector, 0, is_abs=True)
        self.assertEqual(output_vector_2.shape.as_list(), [3, 1])
        input_vector_trans = tf.random_uniform(shape=(3, 1), dtype=tf.float32)
        output_vector_3 = nn_params.forward_pass(input_vector_trans,
                                                 0,
                                                 is_transpose=True)
        self.assertEqual(output_vector_3.shape.as_list(), [2, 1])