Beispiel #1
0
    def test_rerouted_function(self, fn, args):
        """Tests rerouted function.

    Tests that a method of the internal optimizer is correctly routed from
    the BoltOn instance to the internal optimizer instance (TestOptimizer,
    here).

    Args:
      fn: fn to test
      args: arguments to that fn
    """
        loss = TestLoss(1, 1, 1)
        optimizer = TestOptimizer()
        bolton = opt.BoltOn(optimizer, loss)
        model = TestModel(3)
        model.compile(optimizer, loss)
        model.layers[0].kernel = model.layers[0].kernel_initializer(
            (model.layer_input_shape[0], model.n_outputs))
        model.layers[0].kernel = model.layers[0].kernel_initializer(
            (model.layer_input_shape[0], model.n_outputs))
        bolton._is_init = True  # pylint: disable=protected-access
        bolton.layers = model.layers
        bolton.epsilon = 2
        bolton.noise_distribution = 'laplace'
        bolton.n_outputs = 1
        bolton.n_samples = 1
        self.assertEqual(
            getattr(bolton, fn, lambda: 'fn not found')(*args), 'test')
Beispiel #2
0
    def test_fn(self, fn, args, result, test_attr):
        """test that a fn of BoltOn optimizer is working as expected.

    Args:
      fn: method of Optimizer to test
      args: args to optimizer fn
      result: the expected result
      test_attr: None if the fn returns the test result. Otherwise, this is the
        attribute of BoltOn to check against result with.
    """
        tf.random.set_seed(1)
        loss = TestLoss(1, 1, 1)
        bolton = opt.BoltOn(TestOptimizer(), loss)
        model = TestModel(1)
        model.layers[0].kernel = model.layers[0].kernel_initializer(
            (model.layer_input_shape[0], model.n_outputs))
        bolton._is_init = True  # pylint: disable=protected-access
        bolton.layers = model.layers
        bolton.epsilon = 2
        bolton.noise_distribution = 'laplace'
        bolton.n_outputs = 1
        bolton.n_samples = 1
        res = getattr(bolton, fn, None)(*args)
        if test_attr is not None:
            res = getattr(bolton, test_attr, None)
        if hasattr(res, 'numpy') and hasattr(result,
                                             'numpy'):  # both tensors/not
            res = res.numpy()
            result = result.numpy()
        self.assertEqual(res, result)
Beispiel #3
0
 def test_run(fn, args):
     loss = TestLoss(1, 1, 1)
     bolton = opt.BoltOn(TestOptimizer(), loss)
     model = TestModel(1, (1, ), 1)
     model.compile(bolton, loss)
     model.layers[0].kernel = model.layers[0].kernel_initializer(
         (model.layer_input_shape[0], model.n_outputs))
     getattr(bolton, fn)(*args)
Beispiel #4
0
 def test_run(noise, epsilon):
     loss = TestLoss(1, 1, 1)
     bolton = opt.BoltOn(TestOptimizer(), loss)
     model = TestModel(1, (1, ), 1)
     model.compile(bolton, loss)
     model.layers[0].kernel = model.layers[0].kernel_initializer(
         (model.layer_input_shape[0], model.n_outputs))
     with bolton(noise, epsilon, model.layers, 1, 1, 1) as _:
         pass
Beispiel #5
0
 def test_run():
     loss = TestLoss(1, 1, 1)
     bolton = opt.BoltOn(TestOptimizer(), loss)
     model = TestModel(1, (1, ), 1)
     model.compile(bolton, loss)
     model.layers[0].kernel = model.layers[0].kernel_initializer(
         (model.layer_input_shape[0], model.n_outputs))
     with bolton(noise, epsilon, model.layers, class_weights, 1,
                 1) as _:
         pass
     return _ops.convert_to_tensor_v2(bolton.epsilon, dtype=tf.float32)
Beispiel #6
0
    def test_attribute_error(self, attr):
        """Test rerouting of attributes.

    Test that attribute of internal optimizer is correctly rerouted to the
    internal optimizer

    Args:
      attr: attribute to test
    """
        loss = TestLoss(1, 1, 1)
        internal_optimizer = TestOptimizer()
        optimizer = opt.BoltOn(internal_optimizer, loss)
        with self.assertRaises(AttributeError):
            getattr(optimizer, attr)
Beispiel #7
0
    def test_reroute_attr(self, attr):
        """Test a function is rerouted.

    Test that attribute of internal optimizer is correctly rerouted to the
    internal optimizer.

    Args:
      attr: attribute to test
    """
        loss = TestLoss(1, 1, 1)
        internal_optimizer = TestOptimizer()
        optimizer = opt.BoltOn(internal_optimizer, loss)
        self.assertEqual(getattr(optimizer, attr),
                         getattr(internal_optimizer, attr))
Beispiel #8
0
 def project_fn(r):
     loss = TestLoss(1, 1, r)
     bolton = opt.BoltOn(TestOptimizer(), loss)
     model = TestModel(n_out, shape, init_value)
     model.compile(bolton, loss)
     model.layers[0].kernel = model.layers[0].kernel_initializer(
         (model.layer_input_shape[0], model.n_outputs))
     bolton._is_init = True  # pylint: disable=protected-access
     bolton.layers = model.layers
     bolton.epsilon = 2
     bolton.noise_distribution = 'laplace'
     bolton.n_outputs = 1
     bolton.n_samples = 1
     bolton.project_weights_to_r()
     return _ops.convert_to_tensor_v2(bolton.layers[0].kernel,
                                      tf.float32)
Beispiel #9
0
 def test_run(fn, args):
     loss = TestLoss(1, 1, 1)
     bolton = opt.BoltOn(TestOptimizer(), loss)
     model = TestModel(1, (1, ), 1)
     model.compile(bolton, loss)
     model.layers[0].kernel = model.layers[0].kernel_initializer(
         (model.layer_input_shape[0], model.n_outputs))
     bolton._is_init = True  # pylint: disable=protected-access
     bolton.noise_distribution = 'laplace'
     bolton.epsilon = 1
     bolton.layers = model.layers
     bolton.class_weights = 1
     bolton.n_samples = 1
     bolton.batch_size = 1
     bolton.n_outputs = 1
     res = getattr(bolton, fn, lambda: 'test')(*args)
     if res != 'test':
         res = 1
     else:
         res = 0
     return _ops.convert_to_tensor_v2(res, dtype=tf.float32)