예제 #1
0
파일: benchmarks.py 프로젝트: crlsmcl/MJHMC
def sampler_speedometer():
    """ Tests average sample speed of different samplers in different configurations

    :returns: Just prints info
    :rtype: None
    """

    gaussian = Gaussian()
    np.random.seed(2015)
    pot = ProductOfT(ndims=36,nbasis=36)
    mjhmc_gauss = MarkovJumpHMC(distribution=gaussian)
    mjhmc_gauss_nr = MarkovJumpHMC(distribution=gaussian, resample=False)
    control_gauss = ControlHMC(distribution=gaussian)
    mjhmc_pot = MarkovJumpHMC(distribution=pot)
    mjhmc_pot_nr = MarkovJumpHMC(distribution=pot, resample=False)
    control_pot = ControlHMC(distribution=pot)

    m_g_r_avg = time_per_sample(mjhmc_gauss)
    m_g_nr_avg = time_per_sample(mjhmc_gauss_nr)
    c_g_avg = time_per_sample(control_gauss)

    m_p_r_avg = time_per_sample(mjhmc_pot)
    m_p_nr_avg = time_per_sample(mjhmc_pot_nr)
    c_p_avg = time_per_sample(control_pot)

    print "Average times per samples..."
    print "resampled MJHMC numpy gradient: {}".format(m_g_r_avg)
    print "not resampled MJHMC numpy gradient: {}".format(m_g_nr_avg)
    print "control HMC numpy gradient: {}".format(c_g_avg)

    print "resampled MJHMC theano gradient: {}".format(m_p_r_avg)
    print "not resampled MJHMC theano gradient: {}".format(m_p_nr_avg)
    print "control HMC theano gradient: {}".format(c_p_avg)
예제 #2
0
 def test_hyperparameter_setting(self):
     """
     Checks to see that hyperparameters are properly set
     """
     beta = np.random.random()
     epsilon = np.random.random() * 5
     num_leapfrop_steps = np.random.randint(10)
     gauss = Gaussian()
     sampler = self.sampler_to_test(distribution=gauss,
                                    beta=beta,
                                    epsilon=epsilon,
                                    num_leapfropg_steps=num_leapfrop_steps)
     self.assertTrue(sampler.beta == beta)
     self.assertTrue(sampler.epsilon == epsilon)
     self.assertTrue(sampler.num_leapfropg_steps == num_leapfrop_steps)
예제 #3
0
    def test_autocorrelation_good_init_half_window(self):
        """ Tests that the legacy and fast ac implementations produce identical output
        when the sampler is not initialized in a biased manner
        (meaning we don't have to worry about variance mismatch)
        runs on the half window

        :returns: None
        :rtype: None
        """
        gaussian = Gaussian()
        sample_df = sample_to_df(MarkovJumpHMC, gaussian, num_steps=1000)
        slow_ac_df = slow_autocorrelation(sample_df, half_window=True)
        slow_ac = slow_ac_df.autocorrelation.as_matrix()
        fast_ac_df = autocorrelation(sample_df, half_window=True)
        fast_ac = fast_ac_df.autocorrelation.as_matrix()
        self.assertTrue(np.isclose(slow_ac, fast_ac, atol=TOL).all())
예제 #4
0
 def test_ill_conditioned_gaussian(self):
     """
     Checks to see that {} can sample from an ill-conditioned gaussian
     """.format(self.sampler_to_test.__name__)
     n_samples = 100000
     ic_gaussian_2d = Gaussian(ndims=2, log_conditioning=1)
     target_cov = np.linalg.inv(ic_gaussian_2d.J)
     sampler = self.sampler_to_test(ic_gaussian_2d.Xinit, ic_gaussian_2d.E,
                                    ic_gaussian_2d.dEdX)
     sampler.burn_in()
     samples = sampler.sample(n_samples)
     sample_cov = np.cov(samples)
     self.assertTrue(
         self.approx_equal(sample_cov, target_cov),
         msg=(" samples covariance: \n {} is not within tolerance to "
              "target cov: \n {}. \n I am {}").format(
                  sample_cov, target_cov, self.sampler_to_test.__name__))
예제 #5
0
파일: spectral.py 프로젝트: rueberger/MJHMC
def ladder_numerical_err_hist(distr=None, n_steps=int(1e5)):
    """ Compute a histogram of the numerical integration error
    on the state ladder. Implicitly assumes that such a distribution exists
    and is shared by all ladders

    Args:
     distr: distribution object to run on, make sure n_batch is big

    Returns:
     energies = {E(L^j \zeta) : j \in {0, ..., k}}^{n_batch}
     run_lengths: list of observed ladder sizes
    """
    distr = distr or Gaussian(nbatch=1)
    sampler = ControlHMC(distribution=distr)

    # [[ladder_energies]]
    energies = []
    run_lengths = []
    r_counts = [0]
    ladder_energies = [np.squeeze(sampler.state.H())]
    run_length = 0
    for _ in range(n_steps):
        if sampler.r_count == r_counts[-1]:
            run_length += 1
            ladder_energies.append(np.squeeze(sampler.state.H()))
        else:
            run_lengths.append(run_length)
            run_length = 0
            energies.append(np.array(ladder_energies))
            ladder_energies = [np.squeeze(sampler.state.H())]
        r_counts.append(sampler.r_count)
        sampler.sampling_iteration()
    centered_energies = []
    for ladder_energies in energies:
        centered_energies += list(ladder_energies - ladder_energies[0])
    return centered_energies, run_lengths
예제 #6
0
def main(job_id, params):
    print "job id: {}, params: {}".format(job_id, params)
    return obj_func(ControlHMC, Gaussian(ndims=50, nbatch=50, log_conditioning=1.1),
                    job_id, **params)
예제 #7
0
def main(job_id, params):
    print "job id: {}, params: {}".format(job_id, params)
    return obj_func(MarkovJumpHMC, Gaussian(ndims=10, nbatch=200), job_id, **params)