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))
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)
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)
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)
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)
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