我刚开始研究TensorFlow,我不确定如何从不容易表示为股票分布组成的自定义概率分布中进行采样。
如何为MCMC采样器的target_log_prob
输入使用自定义函数?
您可以将任何target_log_prob_fn
传递给tfp.mcmc.HamiltonianMonteCarlo
TransitionKernel
,只要它计算的值与您的目标密度成比例(并且相对于其输入是可微分的(。例如
def target_log_prob_fn(x):
return -.5 * x ** 2
是一个完全有效的目标日志prob函数。如果你想并行地对多个链进行采样,你需要注意你的目标是";批次友好";。例如,如果你需要在状态的某个部分上reduce_sum
(比如对于多变量分布(,一定要明确你在上求和的轴
def target_log_prob_fn(x):
return -.5 * tf.reduce_sum(x ** 2, axis=-1) # don't sum over chains!
...
tfp.mcmc.sample_chain(
kernel,
num_burnin_steps=100,
num_results=100,
current_state=tf.zeros(10, 5), # 10 parallel chains of 5-D variables
)
啊!