Я построил генеративную модель в Tensorflow Probability / Edward2, и теперь мне интересно адаптировать ее к методике MCMC.
flips1 = sum(np.round(np.random.rand(10)))
flips2 = sum(np.round(np.random.rand(10)))
def m():
prior1 = ed.Beta(concentration0=10, concentration1=10, name='prior1')
outcome1 = ed.Binomial(total_count=10, probs=prior1, name='outs1')
prior2 = ed.Beta(concentration0=1, concentration1=1, name='prior2')
outcome2 = ed.Binomial(total_count=10, probs=prior2, name='outs2')
c = outcome1 + outcome2
return c
fnc = ed.make_log_joint_fn(m)
def target(p1, p2):
return fnc(prior1=p1, outs1=flips1, prior2=p2, outs2=flips2)
step_size = tf.get_variable(
name='step_size',
initializer=.001,
use_resource=True, # For TFE compatibility.
trainable=False)
hmc = tfp.mcmc.HamiltonianMonteCarlo(
target_log_prob_fn=target,
num_leapfrog_steps=3,
step_size=step_size,
step_size_update_fn=tfp.mcmc.make_simple_step_size_update_policy())
samples, kernel_results = tfp.mcmc.sample_chain(
num_results=int(10e3),
num_burnin_steps=int(1e3),
current_state=[.01, .01],
kernel=hmc)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
samples_, res = sess.run([samples, kernel_results])
Отсюда samples_
дает мне образцы цепей Маркова для prior1
и prior2
. Тем не менее, я также заинтересован в том, чтобы увидеть значения других переменных внутри модели. Например, я хотел бы видеть цепи Маркова для outcome1
и outcome2
.
Самое главное, я хотел бы видеть значение c
без его параметризации. В pyMC3 это можно сделать, сделав его pm.Deterministic
. Я не смог найти эквивалентную функциональность в TF Вероятность - это доступно? ed.tape()
имеет к этому какое-то отношение?