我最近开始使用 gpflow 来构建 GP 模型。我使用 Hamiltonian Monte Carlo 用一条链对后部进行采样。
我的目标是运行多个链并执行收敛诊断。
这是我为一条链设置的:
num_burnin_steps = ci_niter(100)
num_samples = ci_niter(500)
hmc_helper = gpflow.optimizers.SamplingHelper(
model.log_posterior_density, model.trainable_parameters
)
hmc = tfp.mcmc.HamiltonianMonteCarlo(
target_log_prob_fn=hmc_helper.target_log_prob_fn, num_leapfrog_steps=10, step_size=0.01
)
adaptive_hmc = tfp.mcmc.SimpleStepSizeAdaptation(
hmc, num_adaptation_steps=10, target_accept_prob=f64(0.75), adaptation_rate=0.1
)
@tf.function
def run_chain_fn():
return tfp.mcmc.sample_chain(
num_results=num_samples,
num_burnin_steps=num_burnin_steps,
current_state=hmc_helper.current_state,
kernel=adaptive_hmc,
trace_fn=lambda _, pkr: pkr.inner_results.is_accepted,
)
samples, _ = run_chain_fn()
constrained_samples = hmc_helper.convert_to_constrained_values(samples
我找不到任何关于如何为多个链修改它的示例。这是我能找到的最接近的例子,它做同样的事情。Initial_state 更改为具有 10 个链。要对我的示例执行相同操作,我需要更改 hmc_helper.current_state 但无法找出正确的方法。
任何建议将不胜感激。
我是堆栈溢出的新手,如果我的问题不清楚,我深表歉意。
谢谢!