Beispiel #1
0
def match_convergence_test(v_fun,seed,correct_mean,correct_cov):
    mcmc_meta_double = mcmc_sampler_settings_dict(mcmc_id=0, samples_per_chain=2000, num_chains=4, num_cpu=4, thin=1,
                                                  tune_l_per_chain=1000,
                                                  warmup_per_chain=1100, is_float=False, isstore_to_disk=False,
                                                  allow_restart=True, seed=seed)
    mcmc_meta_float = mcmc_sampler_settings_dict(mcmc_id=0, samples_per_chain=2000, num_chains=4, num_cpu=4, thin=1,
                                                 tune_l_per_chain=1000,
                                                 warmup_per_chain=1100, is_float=True, isstore_to_disk=False,
                                                 allow_restart=True, seed=seed)

    input_dict = {"v_fun": [v_fun], "epsilon": ["dual"], "second_order": [False], "cov": ["adapt"],
                  "metric_name": ["diag_e"], "dynamic": [True], "windowed": [False],
                  "criterion": ["gnuts"]}
    ep_dual_metadata_argument = {"name": "epsilon", "target": 0.8, "gamma": 0.05, "t_0": 10,
                                 "kappa": 0.75, "obj_fun": "accept_rate", "par_type": "fast"}

    dim = len(v_fun(precision_type="torch.DoubleTensor").flattened_tensor)
    adapt_cov_arguments = [adapt_cov_default_arguments(par_type="slow", dim=dim)]
    dual_args_list = [ep_dual_metadata_argument]
    other_arguments = other_default_arguments()

    tune_settings_dict = tuning_settings(dual_args_list, [], adapt_cov_arguments, other_arguments)

    tune_dict = tuneinput_class(input_dict).singleton_tune_dict()

    sampler_double = mcmc_sampler(tune_dict=tune_dict, mcmc_settings_dict=mcmc_meta_double,
                                  tune_settings_dict=tune_settings_dict)

    sampler_float = mcmc_sampler(tune_dict=tune_dict, mcmc_settings_dict=mcmc_meta_float,
                                 tune_settings_dict=tune_settings_dict)

    sampler_double.start_sampling()

    sampler_float.start_sampling()

    sampler_double.remove_failed_chains()

    sampler_float.remove_failed_chains()

    float_samples = sampler_float.get_samples(permuted=False)
    double_samples = sampler_double.get_samples(permuted=False)
    short_diagnostics_float = check_mean_var_stan(mcmc_samples=float_samples,
                                                  correct_mean=correct_mean.astype(numpy.float32),
                                                  correct_cov=correct_cov.astype(numpy.float32))
    short_diagnostics_double = check_mean_var_stan(mcmc_samples=double_samples,correct_mean=correct_mean,correct_cov=correct_cov)

    samples_double_cast_to_float = double_samples.astype(numpy.float32)
    # samples_float = output_float["samples"]

    # combined_samples = torch.cat([samples_double_cast_to_float,float_samples],dim=0)

    combined_samples = numpy.concatenate([samples_double_cast_to_float, float_samples], axis=0)
    short_diagnostics_combined = check_mean_var_stan(mcmc_samples=combined_samples,correct_mean=correct_mean.astype(numpy.float32),
                                                  correct_cov=correct_cov.astype(numpy.float32))

    out = {"diag_combined_mean": short_diagnostics_combined["pc_of_mean"], "diag_float_mean": short_diagnostics_float["pc_of_mean"],
           "diag_double_mean": short_diagnostics_double["pc_of_mean"],"diag_combined_cov":short_diagnostics_combined["pc_of_cov"],
           "diag_float_cov":short_diagnostics_float["pc_of_cov"],"diag_double_cov":short_diagnostics_double["pc_of_cov"]}
    return(out)
Beispiel #2
0
dual_args_list = [ep_dual_metadata_argument]
other_arguments = other_default_arguments()
tune_dict = tuneinput_class(input_dict).singleton_tune_dict()
tune_settings_dict = tuning_settings(dual_args_list, [], [], other_arguments)

sampler1 = mcmc_sampler(tune_dict=tune_dict,
                        mcmc_settings_dict=mcmc_meta,
                        tune_settings_dict=tune_settings_dict)

store_name = 'standard_sampler.pkl'
sampled = False
if sampled:
    sampler1 = pickle.load(open(store_name, 'rb'))
else:
    sampler1.start_sampling()
    with open(store_name, 'wb') as f:
        pickle.dump(sampler1, f)

mcmc_samples1 = sampler1.get_samples(permuted=False)

out = check_mean_var_stan(mcmc_samples=mcmc_samples1,
                          correct_mean=correct_mean,
                          correct_cov=correct_cov,
                          diag_only=False)
mean_check, cov_check = out["mcmc_mean"], out["mcmc_Cov"]
pc_mean, pc_cov = out["pc_of_mean"], out["pc_of_cov"]
print(mean_check)
print(cov_check)
print(pc_mean)
print(pc_cov)
Beispiel #3
0
    "obj_fun": "accept_rate",
    "par_type": "fast"
}
#
adapt_cov_arguments = [
    adapt_cov_default_arguments(
        par_type="slow",
        dim=v_generator(precision_type="torch.DoubleTensor").get_model_dim())
]
dual_args_list = [ep_dual_metadata_argument]
other_arguments = other_default_arguments()
tune_settings_dict = tuning_settings(dual_args_list, [], adapt_cov_arguments,
                                     other_arguments)
tune_dict = tuneinput_class(input_dict).singleton_tune_dict()

sampler1 = mcmc_sampler(tune_dict=tune_dict,
                        mcmc_settings_dict=mcmc_meta,
                        tune_settings_dict=tune_settings_dict)

sampler1.start_sampling()

mcmc_samples = sampler1.get_samples(permuted=False)

correct_mean = numpy.zeros(dim)
correct_cov = numpy.linalg.inv(input_data["input"])
check_result = check_mean_var_stan(mcmc_samples=mcmc_samples,
                                   correct_mean=correct_mean,
                                   correct_cov=correct_cov)
print(check_result)
save_name = "check_result_{}.npz".format("mvn_{}".format(100))
numpy.savez(save_name, **check_result)