Beispiel #1
0
 def test_is_calibrated(self):
     calibrated_kernel = test_fixtures.TestTransitionKernel()
     uncalibrated_kernel = test_fixtures.TestTransitionKernel(
         is_calibrated=False)
     calibrated_thinner = tfp.experimental.mcmc.ThinningKernel(
         calibrated_kernel, 0)
     uncalibrated_thinner = tfp.experimental.mcmc.ThinningKernel(
         uncalibrated_kernel, 0)
     self.assertTrue(calibrated_thinner.is_calibrated)
     self.assertFalse(uncalibrated_thinner.is_calibrated)
 def test_is_calibrated(self):
     calibrated_kernel = test_fixtures.TestTransitionKernel()
     uncalibrated_kernel = test_fixtures.TestTransitionKernel(
         is_calibrated=False)
     calibrated_discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
         calibrated_kernel)
     uncalibrated_discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
         uncalibrated_kernel)
     self.assertTrue(calibrated_discarder.is_calibrated)
     self.assertFalse(uncalibrated_discarder.is_calibrated)
Beispiel #3
0
 def test_is_calibrated(self):
     fake_calibrated_kernel = test_fixtures.TestTransitionKernel()
     fake_uncalibrated_kernel = test_fixtures.TestTransitionKernel(
         is_calibrated=False)
     fake_reducer = test_fixtures.TestReducer()
     calibrated_reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=fake_calibrated_kernel,
         reducer=fake_reducer,
     )
     uncalibrated_reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=fake_uncalibrated_kernel,
         reducer=fake_reducer,
     )
     self.assertTrue(calibrated_reducer_kernel.is_calibrated)
     self.assertFalse(uncalibrated_reducer_kernel.is_calibrated)
Beispiel #4
0
    def test_nested_reducers(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.TestReducer()
        mean_reducer = test_fixtures.NaiveMeanReducer()
        cov_reducer = tfp.experimental.mcmc.CovarianceReducer()
        reducer_kernel = tfp.experimental.mcmc.WithReductions(
            inner_kernel=fake_kernel,
            reducer=[[mean_reducer, cov_reducer], [fake_reducer]],
        )

        chain_state, kernel_results = 0., reducer_kernel.bootstrap_results(0.)
        for _ in range(6):
            chain_state, kernel_results = reducer_kernel.one_step(
                chain_state, kernel_results)

        final_cov, final_mean = self.evaluate([
            cov_reducer.finalize(kernel_results.streaming_calculations[0][1]),
            mean_reducer.finalize(kernel_results.streaming_calculations[0][0])
        ])
        self.assertEqual(2, len(kernel_results.streaming_calculations))
        self.assertEqual(2, len(kernel_results.streaming_calculations[0]))
        self.assertEqual(1, len(kernel_results.streaming_calculations[1]))

        self.assertEqual(3.5, final_mean)
        self.assertAllEqual(
            3.5, kernel_results.streaming_calculations[0][1].cov_state.mean)
        self.assertAllEqual(6, kernel_results.streaming_calculations[1][0])
        self.assertNear(np.cov(np.arange(1, 7), ddof=0).tolist(),
                        final_cov,
                        err=1e-6)
        self.assertAllEqual(6, kernel_results.inner_results.counter_1)
        self.assertAllEqual(12, kernel_results.inner_results.counter_2)
Beispiel #5
0
 def test_covariance_after_transformation(self):
     fake_kernel = test_fixtures.TestTransitionKernel(
         target_log_prob_fn=lambda x: -x**2 / 2)
     transformed_kernel = tfp.mcmc.TransformedTransitionKernel(
         inner_kernel=fake_kernel,
         bijector=tfp.bijectors.Exp(),
     )
     cov_reducer = tfp.experimental.mcmc.CovarianceReducer()
     reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=transformed_kernel,
         reducer=cov_reducer,
     )
     samples, _, kernel_results = tfp.mcmc.sample_chain(
         num_results=10,
         current_state=1.,
         kernel=reducer_kernel,
         trace_fn=None,
         return_final_kernel_results=True,
         seed=test_util.test_seed())
     samples, final_cov = self.evaluate([
         samples,
         cov_reducer.finalize(kernel_results.streaming_calculations)
     ])
     self.assertAllClose(
         np.mean(samples, axis=0),
         kernel_results.streaming_calculations.cov_state.mean,
         rtol=1e-6)
     self.assertAllClose(np.cov(samples.T, ddof=0), final_cov, rtol=1e-6)
Beispiel #6
0
    def test_nested_state_dependent_reducers(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        nested_reducer = [[
            test_fixtures.NaiveMeanReducer(),
            test_fixtures.NaiveMeanReducer()
        ], [test_fixtures.NaiveMeanReducer()]]
        reducer_kernel = tfp.experimental.mcmc.WithReductions(
            inner_kernel=fake_kernel,
            reducer=nested_reducer,
        )
        pkr = reducer_kernel.bootstrap_results(0.)
        new_sample, kernel_results = reducer_kernel.one_step(0., pkr)
        new_sample, kernel_results = self.evaluate(
            [new_sample, kernel_results])

        self.assertEqual(2, len(kernel_results.streaming_calculations[0]))
        self.assertEqual(1, len(kernel_results.streaming_calculations[1]))
        self.assertEqual((2, ),
                         np.array(kernel_results.streaming_calculations).shape)

        self.assertAllEqualNested(
            kernel_results.streaming_calculations,
            [[[1, 1], [1, 1]], [[1, 1]]],
        )
        self.assertEqual(1, new_sample)
        self.assertEqual(1, kernel_results.inner_results.counter_1)
        self.assertEqual(2, kernel_results.inner_results.counter_2)
    def test_simple_operation(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.NaiveMeanReducer()
        seed1, seed2 = tfp.random.split_seed(
            test_util.test_seed(sampler_type='stateless'))
        reduction_rslt, last_sample, kr = tfp.experimental.mcmc.sample_fold(
            num_steps=5,
            current_state=0.,
            kernel=fake_kernel,
            reducer=fake_reducer,
            seed=seed1)
        reduction_rslt, last_sample, kernel_results = self.evaluate(
            [reduction_rslt, last_sample, kr])
        self.assertEqual(3, reduction_rslt)
        self.assertEqual(5, last_sample)
        self.assertEqual(5, kernel_results.counter_1)
        self.assertEqual(10, kernel_results.counter_2)

        # Warm-restart the underlying kernel but not the reduction
        reduction_rslt_2, last_sample_2, kr_2 = tfp.experimental.mcmc.sample_fold(
            num_steps=5,
            current_state=last_sample,
            kernel=fake_kernel,
            reducer=fake_reducer,
            previous_kernel_results=kernel_results,
            seed=seed2)
        reduction_rslt_2, last_sample_2, kernel_results_2 = self.evaluate(
            [reduction_rslt_2, last_sample_2, kr_2])
        self.assertEqual(8, reduction_rslt_2)
        self.assertEqual(10, last_sample_2)
        self.assertEqual(10, kernel_results_2.counter_1)
        self.assertEqual(20, kernel_results_2.counter_2)
Beispiel #8
0
    def test_non_static_thinning(self):
        fake_inner_kernel = test_fixtures.TestTransitionKernel()
        num_steps_to_skip = tf.Variable(1, dtype=tf.int32)
        thinner = tfp.experimental.mcmc.ThinningKernel(
            fake_inner_kernel, num_steps_to_skip=num_steps_to_skip)

        def _loop_body(i, curr_state, pkr):
            new_state, kernel_results = thinner.one_step(
                curr_state,
                pkr,
            )
            return (i + 1, new_state, kernel_results)

        pkr = thinner.bootstrap_results(0.)
        _, final_sample, kernel_results = tf.while_loop(
            lambda i, _, __: i < 2,
            _loop_body,
            (0., 0., pkr),
        )
        self.evaluate([num_steps_to_skip.initializer])
        final_sample, kernel_results = self.evaluate(
            [final_sample, kernel_results])
        self.assertEqual(4, final_sample)
        self.assertEqual(4, kernel_results.counter_1)
        self.assertEqual(8, kernel_results.counter_2)
Beispiel #9
0
    def test_tensor_thinning(self):
        fake_inner_kernel = test_fixtures.TestTransitionKernel()
        thinner = tfp.experimental.mcmc.ThinningKernel(
            fake_inner_kernel,
            num_steps_to_skip=tf.convert_to_tensor(1),
        )

        def _loop_body(i, curr_state, pkr):
            new_state, kernel_results = thinner.one_step(
                curr_state,
                pkr,
            )
            return (i + 1, new_state, kernel_results)

        pkr = thinner.bootstrap_results(0.)
        _, final_sample, kernel_results = tf.while_loop(
            lambda i, _, __: i < 2,
            _loop_body,
            (0., 0., pkr),
        )

        final_sample, kernel_results = self.evaluate(
            [final_sample, kernel_results])
        self.assertEqual(4, final_sample)
        self.assertEqual(4, kernel_results.counter_1)
        self.assertEqual(8, kernel_results.counter_2)
Beispiel #10
0
    def test_basic_operation(self):
        kernel = test_fixtures.TestTransitionKernel()
        result = tfp.experimental.mcmc.sample_chain_with_burnin(
            num_results=2,
            current_state=0.,
            kernel=kernel,
            seed=test_util.test_seed())
        samples = result.trace
        kernel_results = result.final_kernel_results
        self.assertAllClose([2], tensorshape_util.as_list(samples.shape))

        samples, kernel_results = self.evaluate([samples, kernel_results])
        self.assertAllClose([1, 2], samples)
        self.assertAllClose(2, kernel_results.counter_1)
        self.assertAllClose(4, kernel_results.counter_2)

        # Warm-restart the underlying kernel.  The Trace does not support warm
        # restart.
        result_2 = tfp.experimental.mcmc.sample_chain_with_burnin(
            num_results=2, **result.resume_kwargs)
        samples_2, kernel_results_2 = self.evaluate(
            [result_2.trace, result_2.final_kernel_results])
        self.assertAllClose([3, 4], samples_2)
        self.assertAllClose(4, kernel_results_2.counter_1)
        self.assertAllClose(8, kernel_results_2.counter_2)
    def test_tf_while(self):
        fake_inner_kernel = test_fixtures.TestTransitionKernel()
        thinner = tfp.experimental.mcmc.ThinningKernel(
            fake_inner_kernel,
            num_steps_to_skip=1,
        )

        def _loop_body(i, seed, curr_state, pkr):
            mcmc_seed, seed = tfp.random.split_seed(seed)
            new_state, kernel_results = thinner.one_step(
                curr_state,
                pkr,
                seed=mcmc_seed,
            )
            return (i + 1, seed, new_state, kernel_results)

        pkr = thinner.bootstrap_results(0.)
        _, _, final_sample, kernel_results = tf.while_loop(
            lambda i, *_: i < 2,
            _loop_body,
            (0., test_util.test_seed(sampler_type='stateless'), 0., pkr),
        )
        final_sample, kernel_results = self.evaluate(
            [final_sample, kernel_results])
        self.assertEqual(4, final_sample)
        self.assertEqual(4, kernel_results.counter_1)
        self.assertEqual(8, kernel_results.counter_2)
  def test_tensor_thinning_and_burnin(self):
    fake_inner_kernel = test_fixtures.TestTransitionKernel()
    discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
        fake_inner_kernel,
        num_burnin_steps=tf.convert_to_tensor(10),
        num_steps_between_results=tf.convert_to_tensor(1),)

    def _loop_body(i, curr_state, pkr):
      new_state, kernel_results = discarder.one_step(
          curr_state, pkr,
      )
      return (i + 1, new_state, kernel_results)

    pkr = discarder.bootstrap_results(0.)
    _, final_sample, kernel_results = tf.while_loop(
        lambda i, _, __: i < 2,
        _loop_body,
        (0., 0., pkr),
    )

    final_sample, kernel_results = self.evaluate([
        final_sample, kernel_results])
    self.assertEqual(14, final_sample)
    self.assertEqual(2, kernel_results.call_counter)
    self.assertEqual(14, kernel_results.inner_results.counter_1)
    self.assertEqual(28, kernel_results.inner_results.counter_2)
Beispiel #13
0
 def test_with_composed_kernel(self):
   fake_inner_kernel = test_fixtures.TestTransitionKernel()
   cov_reducer = tfp.experimental.mcmc.CovarianceReducer()
   reducer_kernel = tfp.experimental.mcmc.WithReductions(
       inner_kernel=tfp.experimental.mcmc.SampleDiscardingKernel(
           inner_kernel=fake_inner_kernel,
           num_burnin_steps=10,
           num_steps_between_results=2,),
       reducer=cov_reducer
   )
   current_state, kernel_results = 0., reducer_kernel.bootstrap_results(0.)
   for _ in range(2):
     current_state, kernel_results = reducer_kernel.one_step(
         current_state, kernel_results)
   current_state, kernel_results, cov = self.evaluate([
       current_state,
       kernel_results,
       cov_reducer.finalize(kernel_results.streaming_calculations),
   ])
   self.assertEqual(16, current_state)
   self.assertEqual(2, kernel_results.inner_results.call_counter)
   self.assertEqual(
       16, kernel_results.inner_results.inner_results.counter_1)
   self.assertEqual(
       32, kernel_results.inner_results.inner_results.counter_2)
   self.assertEqual(np.var([13, 16]), cov)
    def test_non_static_thinning_and_burnin(self):
        fake_inner_kernel = test_fixtures.TestTransitionKernel()
        num_burnin_steps = tf.Variable(10, dtype=tf.int32)
        num_steps_between_results = tf.Variable(1, dtype=tf.int32)
        discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
            fake_inner_kernel,
            num_burnin_steps=num_burnin_steps,
            num_steps_between_results=num_steps_between_results)

        def _loop_body(i, curr_state, pkr):
            new_state, kernel_results = discarder.one_step(
                curr_state,
                pkr,
            )
            return (i + 1, new_state, kernel_results)

        pkr = discarder.bootstrap_results(0.)
        _, final_sample, kernel_results = tf.while_loop(
            lambda i, *_: i < 2,
            _loop_body,
            (0., 0., pkr),
        )
        self.evaluate([
            num_burnin_steps.initializer, num_steps_between_results.initializer
        ])
        final_sample, kernel_results = self.evaluate(
            [final_sample, kernel_results])
        self.assertEqual(14, final_sample)
        self.assertEqual(2, kernel_results.call_counter)
        self.assertEqual(14, kernel_results.inner_results.counter_1)
        self.assertEqual(28, kernel_results.inner_results.counter_2)
    def test_tensor_no_burnin(self):
        fake_inner_kernel = test_fixtures.TestTransitionKernel()
        discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
            fake_inner_kernel,
            num_burnin_steps=tf.convert_to_tensor(0),
            num_steps_between_results=tf.convert_to_tensor(1),
        )

        def _loop_body(i, seed, curr_state, pkr):
            mcmc_seed, seed = tfp.random.split_seed(seed)
            new_state, kernel_results = discarder.one_step(
                curr_state,
                pkr,
                seed=mcmc_seed,
            )
            return (i + 1, seed, new_state, kernel_results)

        pkr = discarder.bootstrap_results(0.)
        _, _, final_sample, kernel_results = tf.while_loop(
            lambda i, *_: i < 2,
            _loop_body,
            (0., test_util.test_seed(sampler_type='stateless'), 0., pkr),
        )
        final_sample, kernel_results = self.evaluate(
            [final_sample, kernel_results])
        self.assertEqual(4, final_sample)
        self.assertEqual(2, kernel_results.call_counter)
        self.assertEqual(4, kernel_results.inner_results.counter_1)
        self.assertEqual(8, kernel_results.inner_results.counter_2)
    def test_reducer_warm_restart(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.NaiveMeanReducer()
        red_res, last_sample, kr, red_states = tfp.experimental.mcmc.sample_fold(
            num_steps=5,
            current_state=0.,
            kernel=fake_kernel,
            reducer=fake_reducer,
            return_final_reducer_states=True,
        )
        red_res, last_sample, kernel_results, red_states = self.evaluate(
            [red_res, last_sample, kr, red_states])
        self.assertEqual(3, red_res)
        self.assertEqual(5, last_sample)
        self.assertEqual(5, kernel_results.counter_1)
        self.assertEqual(10, kernel_results.counter_2)

        # Warm-restart the underlying kernel and the reduction
        reduction_rslt_2, last_sample_2, kr_2 = tfp.experimental.mcmc.sample_fold(
            num_steps=5,
            current_state=last_sample,
            previous_kernel_results=kernel_results,
            kernel=fake_kernel,
            reducer=fake_reducer,
            previous_reducer_state=red_states)
        reduction_rslt_2, last_sample_2, kernel_results_2 = self.evaluate(
            [reduction_rslt_2, last_sample_2, kr_2])
        self.assertEqual(5.5, reduction_rslt_2)
        self.assertEqual(10, last_sample_2)
        self.assertEqual(10, kernel_results_2.counter_1)
        self.assertEqual(20, kernel_results_2.counter_2)
 def test_with_composed_kernel(self):
     fake_inner_kernel = test_fixtures.TestTransitionKernel()
     cov_reducer = tfp.experimental.mcmc.CovarianceReducer()
     reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=tfp.experimental.mcmc.SampleDiscardingKernel(
             inner_kernel=fake_inner_kernel,
             num_burnin_steps=10,
             num_steps_between_results=2,
         ),
         reducer=cov_reducer)
     current_state, kernel_results = 0., reducer_kernel.bootstrap_results(
         0.)
     seed = test_util.test_seed(sampler_type='stateless')
     for _ in range(2):
         mcmc_seed, seed = tfp.random.split_seed(seed)
         current_state, kernel_results = reducer_kernel.one_step(
             current_state, kernel_results, seed=mcmc_seed)
     cov = cov_reducer.finalize(kernel_results.reduction_results)
     self.assertAllEqual(16, current_state)
     self.assertAllEqual(2, kernel_results.inner_results.call_counter)
     self.assertAllEqual(
         16, kernel_results.inner_results.inner_results.counter_1)
     self.assertAllEqual(
         32, kernel_results.inner_results.inner_results.counter_2)
     self.assertAllEqual(np.var([13, 16]), cov)
Beispiel #18
0
    def test_tf_while(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.TestReducer()
        reducer_kernel = tfp.experimental.mcmc.WithReductions(
            inner_kernel=fake_kernel,
            reducer=fake_reducer,
        )

        initial_state = 0.
        initial_kernel_results = reducer_kernel.bootstrap_results(
            initial_state)

        def _loop_body(i, curr_state, pkr):
            new_state, kernel_results = reducer_kernel.one_step(
                curr_state, pkr)
            return (i + 1, new_state, kernel_results)

        _, new_sample, kernel_results = tf.while_loop(
            lambda i, _, __: i < 6, _loop_body,
            (0., initial_state, initial_kernel_results))

        new_sample, kernel_results = self.evaluate(
            [new_sample, kernel_results])
        self.assertEqual(6, kernel_results.streaming_calculations)
        self.assertEqual(6, new_sample)
        self.assertEqual(6, kernel_results.inner_results.counter_1)
        self.assertEqual(12, kernel_results.inner_results.counter_2)
    def test_basic_operation(self):
        kernel = test_fixtures.TestTransitionKernel()
        samples, kernel_results, final_results = tfp.experimental.mcmc.sample_chain(
            num_results=2,
            current_state=0.,
            kernel=kernel,
            return_final_kernel_results=True,
            seed=test_util.test_seed())
        self.assertAllClose([2], tensorshape_util.as_list(samples.shape))
        self.assertAllClose([2],
                            tensorshape_util.as_list(
                                kernel_results.counter_1.shape))
        self.assertAllClose([2],
                            tensorshape_util.as_list(
                                kernel_results.counter_2.shape))

        samples, kernel_results = self.evaluate([samples, kernel_results])
        self.assertAllClose([1, 2], samples)
        self.assertAllClose([1, 2], kernel_results.counter_1)
        self.assertAllClose([2, 4], kernel_results.counter_2)

        # Warm-restart the underlying kernel.  The Trace does not support warm
        # restart.
        samples_2, kr_2 = tfp.experimental.mcmc.sample_chain(
            num_results=2,
            current_state=samples[-1],
            previous_kernel_results=final_results,
            kernel=kernel,
        )
        samples_2, kernel_results_2 = self.evaluate([samples_2, kr_2])
        self.assertAllClose([3, 4], samples_2)
        self.assertAllClose([3, 4], kernel_results_2.counter_1)
        self.assertAllClose([6, 8], kernel_results_2.counter_2)
Beispiel #20
0
    def test_reducer_warm_restart(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.NaiveMeanReducer()
        result = tfp.experimental.mcmc.sample_chain(
            num_results=5,
            current_state=0.,
            kernel=fake_kernel,
            reducer=fake_reducer,
        )
        last_sample, red_res, kernel_results = self.evaluate([
            result.final_state, result.reduction_results,
            result.final_kernel_results
        ])
        self.assertEqual(3, red_res)
        self.assertEqual(5, last_sample)
        self.assertEqual(5, kernel_results.counter_1)
        self.assertEqual(10, kernel_results.counter_2)

        # Warm-restart the underlying kernel and the reduction using the provided
        # restart package
        result_2 = tfp.experimental.mcmc.sample_chain(num_results=5,
                                                      **result.resume_kwargs)
        last_sample_2, reduction_result_2, kernel_results_2 = self.evaluate([
            result_2.final_state, result_2.reduction_results,
            result_2.final_kernel_results
        ])
        self.assertEqual(5.5, reduction_result_2)
        self.assertEqual(10, last_sample_2)
        self.assertEqual(10, kernel_results_2.counter_1)
        self.assertEqual(20, kernel_results_2.counter_2)
 def test_covariance_with_step_kernel(self):
     fake_kernel = test_fixtures.TestTransitionKernel()
     cov_reducer = tfp.experimental.mcmc.CovarianceReducer()
     reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=fake_kernel,
         reducer=cov_reducer,
     )
     chain_state, kernel_results = tfp.experimental.mcmc.step_kernel(
         num_steps=6,
         current_state=0.,
         kernel=reducer_kernel,
         return_final_kernel_results=True,
     )
     chain_state, kernel_results, final_cov = self.evaluate([
         chain_state, kernel_results,
         cov_reducer.finalize(kernel_results.streaming_calculations)
     ])
     self.assertEqual(6, chain_state)
     self.assertEqual(3.5,
                      kernel_results.streaming_calculations.cov_state.mean)
     self.assertNear(np.cov(np.arange(1, 7), ddof=0).tolist(),
                     final_cov,
                     err=1e-6)
     self.assertEqual(6, kernel_results.inner_results.counter_1)
     self.assertEqual(12, kernel_results.inner_results.counter_2)
Beispiel #22
0
    def test_simple_reduction(self):
        fake_kernel = test_fixtures.TestTransitionKernel()
        fake_reducer = test_fixtures.NaiveMeanReducer()
        result = tfp.experimental.mcmc.sample_chain(
            num_results=5,
            current_state=0.,
            kernel=fake_kernel,
            reducer=fake_reducer,
        )
        last_sample, reduction_result, kernel_results = self.evaluate([
            result.final_state, result.reduction_results,
            result.final_kernel_results
        ])
        self.assertEqual(5, last_sample)
        self.assertEqual(3, reduction_result)
        self.assertEqual(5, kernel_results.counter_1)
        self.assertEqual(10, kernel_results.counter_2)

        # Warm-restart the underlying kernel but not the reduction
        result_2 = tfp.experimental.mcmc.sample_chain(
            num_results=5,
            current_state=last_sample,
            kernel=fake_kernel,
            reducer=fake_reducer,
            previous_kernel_results=kernel_results,
        )
        last_sample_2, reduction_result_2, kernel_results_2 = self.evaluate([
            result_2.final_state, result_2.reduction_results,
            result_2.final_kernel_results
        ])
        self.assertEqual(10, last_sample_2)
        self.assertEqual(8, reduction_result_2)
        self.assertEqual(10, kernel_results_2.counter_1)
        self.assertEqual(20, kernel_results_2.counter_2)
 def test_cold_start(self):
     fake_inner_kernel = test_fixtures.TestTransitionKernel()
     discarder = tfp.experimental.mcmc.SampleDiscardingKernel(
         fake_inner_kernel,
         num_burnin_steps=10,
         num_steps_between_results=1,
     )
     seed1, seed2 = tfp.random.split_seed(
         test_util.test_seed(sampler_type='stateless'))
     first_state, _ = discarder.one_step(0.,
                                         discarder.bootstrap_results(0.),
                                         seed=seed1)
     second_state, kernel_results = discarder.one_step(
         first_state, discarder.bootstrap_results(first_state), seed=seed2)
     first_state, second_state, kernel_results = self.evaluate(
         [first_state, second_state, kernel_results])
     # the first `one_step` performs burn-in and thinning to skip
     # `num_burnin_steps` + `num_steps_between_results` samples
     self.assertEqual(12, first_state)
     # the step count is stored in the kernel results. Cold
     # restarting resets the count back to 0 and hence, both
     # thinning and burn-in are once again performed.
     self.assertEqual(24, second_state)
     self.assertEqual(1, kernel_results.call_counter)
     self.assertEqual(12, kernel_results.inner_results.counter_1)
     self.assertEqual(24, kernel_results.inner_results.counter_2)
Beispiel #24
0
 def test_tracing_no_reduction(self):
     fake_kernel = test_fixtures.TestTransitionKernel()
     result = tfp.experimental.mcmc.sample_chain(
         num_results=5,
         current_state=0.,
         kernel=fake_kernel,
         trace_fn=lambda state, _kr: state + 10)
     trace = self.evaluate(result.trace)
     self.assertAllEqual(trace, [11.0, 12.0, 13.0, 14.0, 15.0])
Beispiel #25
0
 def test_initial_state(self):
     fake_kernel = test_fixtures.TestTransitionKernel()
     final_state = step_kernel(
         num_steps=2,
         current_state=1,
         kernel=fake_kernel,
     )
     final_state = self.evaluate(final_state)
     self.assertEqual(final_state, 3)
 def test_warnings_default(self):
     with warnings.catch_warnings(record=True) as triggered:
         kernel = test_fixtures.TestTransitionKernel()
         tfp.experimental.mcmc.sample_chain(num_results=2,
                                            current_state=0.,
                                            kernel=kernel,
                                            seed=test_util.test_seed())
     self.assertTrue(
         any('Tracing all kernel results by default is deprecated' in str(
             warning.message) for warning in triggered))
 def test_no_trace_fn(self):
     kernel = test_fixtures.TestTransitionKernel()
     samples = tfp.experimental.mcmc.sample_chain(
         num_results=2,
         current_state=0.,
         kernel=kernel,
         trace_fn=None,
         seed=test_util.test_seed())
     self.assertAllClose([2], tensorshape_util.as_list(samples.shape))
     samples = self.evaluate(samples)
     self.assertAllClose([1, 2], samples)
Beispiel #28
0
 def test_tracing_a_reduction(self):
     fake_kernel = test_fixtures.TestTransitionKernel()
     fake_reducer = test_fixtures.NaiveMeanReducer()
     result = tfp.experimental.mcmc.sample_chain(
         num_results=5,
         current_state=0.,
         kernel=fake_kernel,
         reducer=fake_reducer,
         trace_fn=lambda _state, _kr, reductions: reductions)
     trace = self.evaluate(result.trace)
     self.assertAllEqual(trace, [1.0, 1.5, 2.0, 2.5, 3.0])
Beispiel #29
0
 def test_boostrap_results(self):
     fake_kernel = test_fixtures.TestTransitionKernel()
     fake_reducer = test_fixtures.TestReducer()
     reducer_kernel = tfp.experimental.mcmc.WithReductions(
         inner_kernel=fake_kernel,
         reducer=fake_reducer,
     )
     pkr = self.evaluate(reducer_kernel.bootstrap_results(9.))
     self.assertEqual(0, pkr.streaming_calculations, 0)
     self.assertEqual(0, pkr.inner_results.counter_1, 0)
     self.assertEqual(0, pkr.inner_results.counter_2, 0)
 def test_is_calibrated(self):
     with warnings.catch_warnings(record=True) as triggered:
         kernel = test_fixtures.TestTransitionKernel(is_calibrated=False)
         tfp.experimental.mcmc.sample_chain(
             num_results=2,
             current_state=0.,
             kernel=kernel,
             trace_fn=lambda current_state, kernel_results: kernel_results,
             seed=test_util.test_seed())
     self.assertTrue(
         any('supplied `TransitionKernel` is not calibrated.' in str(
             warning.message) for warning in triggered))