Вероятность Tensorflow / Edward2 - получение значений внутренней модели во время MCMC - PullRequest
0 голосов
/ 16 января 2019

Я построил генеративную модель в 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() имеет к этому какое-то отношение?

...