コード例 #1
0
    def test_mc_estimator_converges_with_multiple_fixed_estimates_nd(self):
        num_dims = 8
        mean = np.arange(1.27, 1.349, 0.01)
        stddev = 2.0
        batch_size = int(1e5)
        dummy_key_placeholder = tf.placeholder(shape=(), dtype=tf.int32)

        mean_est = tf.constant(mean)
        mean_sq_est = tf.ones([num_dims]) * (stddev**2)

        tol = 5e-3
        conf_level = 0.99

        max_num_steps = (util.half_clt_conf_interval(conf_level, 1, stddev) /
                         (np.min(mean) * tol))**2 + 1
        with self.test_session() as session:
            (mean_est_eval, rel_half_conf_interval,
             converged) = monte_carlo_manager.mc_estimator(
                 mean_est, mean_sq_est, batch_size, dummy_key_placeholder, {},
                 tol, conf_level, max_num_steps, session)

        self.assertAllAlmostEqual(mean_est_eval, mean * np.ones([num_dims]))
        self.assertTrue(converged)
        self.assertAllGreaterEqual(
            rel_half_conf_interval * mean,
            util.half_clt_conf_interval(conf_level, max_num_steps * batch_size,
                                        stddev))
コード例 #2
0
    def test_mc_estimator_converges_with_fixed_estimates(self):
        mean = 1.3
        stddev = 2.0
        batch_size = int(1e5)
        dummy_key_placeholder = tf.placeholder(shape=(), dtype=tf.int32)

        mean_est = tf.constant(mean)
        mean_sq_est = tf.constant(stddev**2)

        tol = 5e-3
        conf_level = 0.99

        max_num_steps = (util.half_clt_conf_interval(conf_level, 1, stddev) /
                         (mean * tol))**2 + 1

        with self.test_session() as session:
            (mean_est_eval, rel_half_conf_interval,
             converged) = monte_carlo_manager.mc_estimator(
                 mean_est, mean_sq_est, batch_size, dummy_key_placeholder, {},
                 tol, conf_level, max_num_steps, session)

        self.assertAlmostEqual(mean_est_eval, mean)
        self.assertTrue(converged)
        self.assertGreaterEqual(
            rel_half_conf_interval,
            util.half_clt_conf_interval(conf_level, max_num_steps * batch_size,
                                        stddev) / mean)
コード例 #3
0
    def test_half_clt_conf_interval_unsupported_type(self):
        confidence_level = 0.95
        num_samples = 400
        # Integer stddev not supported.
        stddev = 2

        with self.assertRaises(TypeError):
            util.half_clt_conf_interval(confidence_level, num_samples, stddev)
コード例 #4
0
    def test_half_clt_conf_interval_with_zero_stdev(self):
        confidence_level = 0.95
        num_samples = 400

        # Test zero scaler.
        stddev = 0.0
        correct_value = stddev / np.sqrt(num_samples) * 1.959963984540
        conf_interval_half_width = util.half_clt_conf_interval(
            confidence_level, num_samples, stddev)

        self.assertAlmostEqual(correct_value, conf_interval_half_width)

        # Test array with zero elements.
        stddev = np.array([2.0, 0.0])
        correct_value = stddev / np.sqrt(num_samples) * 1.959963984540
        conf_interval_half_width = util.half_clt_conf_interval(
            confidence_level, num_samples, stddev)

        self.assertAllAlmostEqual(correct_value, conf_interval_half_width)
コード例 #5
0
    def test_half_clt_conf_interval_is_correct(self):
        confidence_level = 0.95
        num_samples = 400

        # Test scaler float value.
        stddev = 2.0
        correct_value = stddev / np.sqrt(num_samples) * 1.959963984540
        conf_interval_half_width = util.half_clt_conf_interval(
            confidence_level, num_samples, stddev)

        self.assertAlmostEqual(correct_value, conf_interval_half_width)

        # Test array float values.
        stddev = np.array([2.0, 1.0])
        correct_value = stddev / np.sqrt(num_samples) * 1.959963984540
        conf_interval_half_width = util.half_clt_conf_interval(
            confidence_level, num_samples, stddev)

        self.assertAllAlmostEqual(correct_value, conf_interval_half_width)
コード例 #6
0
    def _run_mc_step():
        """Run one mini-batch step of the Monte-Carlo method."""
        feed_dict.update({key_placeholder: num_steps})
        batch_mean_est, batch_mean_sq_est = tf_session.run(
            (mean_est, mean_sq_est), feed_dict=feed_dict)

        new_mean_est_eval = util.running_mean_estimate(mean_est_eval,
                                                       batch_mean_est,
                                                       num_samples, batch_size)
        new_mean_sq_est_eval = util.running_mean_estimate(
            mean_sq_est_eval, batch_mean_sq_est, num_samples, batch_size)
        std_est_eval = util.stddev_est(new_mean_est_eval, new_mean_sq_est_eval)

        half_conf_interval = util.half_clt_conf_interval(
            confidence, num_samples + batch_size, std_est_eval)

        return new_mean_est_eval, new_mean_sq_est_eval, half_conf_interval