Недавно я начал использовать gpflow для построения модели GP. Я использовал гамильтониан Монте-Карло, чтобы взять апостериор с одной цепочкой.
Моя цель - запустить несколько цепочек и выполнить диагностику сходимости.
Это моя настройка для одной цепочки:
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, но я не могу найти правильный способ сделать это.
Любые предложения были бы очень признательны.
Я новичок в переполнении стека, поэтому извиняюсь, если мой вопрос не ясен.
Спасибо!