Esempio n. 1
0
def obj_func(sampler, distr, job_id, **kwargs):
    num_target_grad_evals =  grad_evals[type(distr).__name__]
    default_args = {
        "num_grad_steps": num_target_grad_evals,
        "sample_steps": 1,
        "num_steps": None,
        "half_window": True
    }
    kwargs = unpack_params(kwargs)
    kwargs.update(default_args)
    ac_df = calculate_autocorrelation(sampler, distr, **kwargs)
    n = ac_df['num grad'].values.astype(int)
    # necessary to keep curve_fit from borking
    normed_n = n / (0.5 * num_target_grad_evals)
    y = ac_df['autocorrelation'].values
    if use_exp:
        # wtf fit is mutating input somehow
        r1 = fit(normed_n.copy(), y.copy())[0]
        if debug:
            plot_fit(normed_n, y, r1, job_id, kwargs)
        return -r1
    else:
        if np.isnan(np.sum(ac_df.autocorrelation.values)):
            return 11 * num_target_grad_evals
        for trial, target in enumerate(np.arange(0, 1, 0.1)):
            score = min_idx(ac_df, target)
            if score is not None:
                score += trial * num_target_grad_evals * 0.5
                break
        if debug:
            plot_search_ac(ac_df['num grad'].values.astype(int),
                           ac_df.autocorrelation.values,
                           job_id,
                           kwargs, score)
        return score or 5 * num_target_grad_evals
Esempio n. 2
0
def obj_func(sampler, distr, job_id, **kwargs):
    """ Scores the performance of sampler on distribution given parameters

    :param sampler: sampler being tested. instance of mjhmc.samplers.markov_jump_hmc.HMCBase
    :param distr: distribution being used. instance of mjhmc.misc.distributions.Distribution
    :param job_id: integer label for job being run
    :returns: the score
    :rtype: float
    """
    cos_coef, normed_n_grad_evals, exp_coef, autocor, kwargs = obj_func_helper(sampler, distr, True, kwargs)
    if debug:
        plot_fit(normed_n_grad_evals, autocor, exp_coef, cos_coef, job_id, kwargs)
    return exp_coef
Esempio n. 3
0
def obj_func(sampler, distr, job_id, **kwargs):
    """ Scores the performance of sampler on distribution given parameters

    :param sampler: sampler being tested. instance of mjhmc.samplers.markov_jump_hmc.HMCBase
    :param distr: distribution being used. instance of mjhmc.misc.distributions.Distribution
    :param job_id: integer label for job being run
    :returns: the score
    :rtype: float
    """
    cos_coef, normed_n_grad_evals, exp_coef, autocor, kwargs = obj_func_helper(sampler, distr, True, kwargs)
    if debug:
        plot_fit(normed_n_grad_evals, autocor, exp_coef, cos_coef, job_id, kwargs)
    return exp_coef
Esempio n. 4
0
def plot_all_best(custom_params=None):
    """ Creates a plot with the autocorrelation and fit for each distribution and sampler

    :param custom_params: dictionary of custom params will be used on all distributions
      and samplers. if None uses the current best params for each
    :returns: None
    :rtype: None

    """
    distributions = [
        RoughWell(nbatch=200)
        # Gaussian(ndims=10, nbatch=200),
        # MultimodalGaussian(ndims=5, separation=1)
    ]
    samplers = [
        ControlHMC,
        MarkovJumpHMC
    ]
    with PdfPages("validation.pdf") as pdf:
        for distribution in distributions:
            # [control, mjhmc, lahmc]
            if custom_params is None:
                params = load_params(distribution)
            else:
                params = [custom_params] * 3
            active_params = params[:-1]
            for sampler, hparams in zip(samplers, active_params):
                print "Now running for {} on {}".format(sampler, distribution)
                cos_coef, n_grad_evals, exp_coef, autocor, _ = obj_func_helper(
                    sampler, distribution.reset(), False, hparams)
                fig = plot_fit(n_grad_evals,
                               autocor,
                               exp_coef,
                               cos_coef,
                               'validation',
                               hparams,
                               save=False
                           )
                pdf.savefig(fig)