示例#1
0
    def np_diagnostics(self):
        feature_names = ["num_restarts", "num_divergent","hit_max_tree_depth","ave_num_transitions","total_num_transitions","bfmi","lp_ess",
                         "lp_rhat", "difficulty","num_chains_removed","min_ess","median_ess","percent_rhat"]

        self.remove_failed_chains()
        out = self.get_diagnostics(permuted=False)
        num_restarts = self.metadata.num_restarts
        num_chains_removed = self.metadata.num_chains_removed
        if self.tune_dict["dynamic"]:
            processed_diag = process_diagnostics(out, name_list=["hit_max_tree_depth"])
            hit_max_tree_depth = numpy.squeeze(processed_diag.sum(axis=1))
        else:
            hit_max_tree_depth = 0
        processed_diag = process_diagnostics(out, name_list=["divergent"])
        num_divergent = numpy.squeeze(processed_diag.sum(axis=1))

        processed_diag = process_diagnostics(out, name_list=["num_transitions"])
        total_num_transitions = numpy.sum(processed_diag)
        ave_num_transitions = numpy.squeeze(processed_diag.mean(axis=1))
        energy_summary = energy_diagnostics(diagnostics_obj=out)
        mixed_mcmc_tensor = self.get_samples(permuted=True)
        mcmc_cov = numpy.cov(mixed_mcmc_tensor, rowvar=False)
        mcmc_sd_vec = numpy.sqrt(numpy.diagonal(mcmc_cov))
        difficulty = max(mcmc_sd_vec) / min(mcmc_sd_vec)
        mcmc_samples = self.get_samples(permuted=False)
        out_dict = diagnostics_stan(mcmc_samples)
        min_ess = min(out_dict["ess"])
        median_ess = numpy.median(out_dict["ess"])
        percent_rhat = sum(out_dict["rhat"]<1.05)/len(out_dict["rhat"])
        num_id = self.num_chains
        output = numpy.zeros((num_id, len(feature_names)))

        output[:, 0] = num_restarts
        output[:, 1] = num_divergent
        output[:, 2] = hit_max_tree_depth
        output[:, 3] = ave_num_transitions
        output[:, 4] = total_num_transitions
        output[:, 5] = energy_summary["bfmi_list"]
        output[:, 6] = energy_summary["ess"]
        output[:, 7] = energy_summary["rhat"]
        output[:, 8] = difficulty
        output[:, 9] = num_chains_removed
        output[:,10] = min_ess
        output[:,11] = median_ess
        output[:,12] = percent_rhat
        return(output,feature_names)
示例#2
0
文件: util.py 项目: yiulau/all_code
def get_diagnostics(sampler):
    #
    # want to return numpy array of dimensions [num_chains,9]
    # as well as list of column names

    feature_names = [
        "num_restarts", "num_divergent", "num_hit_max_tree_depth",
        "ave_num_transitions", "bfmi", "lp_ess", "lp_rhat", "difficulty"
    ]
    feature_names = ["num_chains_removed"]

    sampler.remove_failed_chains()
    out = sampler.get_diagnostics(permuted=False)
    num_restarts = sampler.metadata.num_restarts
    num_chains_removed = sampler.metadata.num_chains_removed
    processed_diag = process_diagnostics(out, name_list=["divergent"])
    num_divergent = processed_diag.sum(axis=1)
    processed_diag = process_diagnostics(out, name_list=["hit_max_tree_depth"])
    hix_max_tree_depth = processed_diag.sum(axis=1)
    processed_diag = process_diagnostics(out, name_list=["num_transitions"])
    ave_num_transitions = processed_diag.mean(axis=1)
    energy_summary = energy_diagnostics(diagnostics_obj=out)
    mixed_mcmc_tensor = sampler.get_samples(permuted=True)
    mcmc_cov = numpy.cov(mixed_mcmc_tensor, rowvar=False)
    mcmc_sd_vec = numpy.sqrt(numpy.diagonal(mcmc_cov))
    difficulty = max(mcmc_sd_vec) / min(mcmc_sd_vec)
    num_id = sampler.num_chains
    output = numpy.zeros(num_id, len(feature_names))

    output[:, 0] = num_restarts
    output[:, 1] = num_divergent
    output[:, 2] = hix_max_tree_depth
    output[:, 3] = ave_num_transitions
    output[:, 4] = energy_summary["bfmi_list"]
    output[:, 5] = energy_summary["ess"]
    output[:, 6] = energy_summary["rhat"]
    output[:, 7] = difficulty
    output[:, 8] = num_chains_removed
    return (output, feature_names)
示例#3
0
print(get_short_diagnostics(full_mcmc_tensor))


out = sampler1.get_diagnostics(permuted=False)

print("divergent")
processed_diag = process_diagnostics(out,name_list=["divergent"])

print(processed_diag.sum(axis=1))

#print(processed_diag.shape)

#processed_energy = process_diagnostics(out,name_list=["prop_H"])

print(energy_diagnostics(diagnostics_obj=out))

mcmc_samples_mixed = sampler1.get_samples(permuted=True)
#target_dataset = get_data_dict("8x8mnist")

v_generator = wrap_V_class_with_input_data(class_constructor=V_fc_model_1,input_data=input_data,prior_dict=prior_dict,model_dict=model_dict)
precision_type = "torch.DoubleTensor"
te2,predicted2 = test_error(input_data,v_obj=v_generator(precision_type=precision_type),mcmc_samples=mcmc_samples_mixed,type="classification",memory_efficient=False)

print(te2)
mixed_mcmc_tensor = sampler1.get_samples(permuted=True)
print(mixed_mcmc_tensor)

mcmc_cov = numpy.cov(mixed_mcmc_tensor,rowvar=False)
mcmc_sd_vec = numpy.sqrt(numpy.diagonal(mcmc_cov))