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