使用 Tensorflow Probability 的 RandomWalkMetropolis 函数执行 RandomWalk 步骤

Perform a RandomWalk step with Tensorflow Probability's RandomWalkMetropolis function

我是 Tensorflow Probability 的新手,想进行 RandomWalk Montecarlo 模拟。假设我有代表状态的张量 r。我想要 tfp.mcmc.RandomWalkMetropolis 函数 return 新状态 r' 的提案。

tfp.mcmc.RandomWalkMetropolis(r)
>>> <tensorflow_probability.python.mcmc.random_walk_metropolis.RandomWalkMetropolis object at 0x14abed2185c0>

只有这个 RandomWalkMetropolis 对象被 returned,而不是相同的状态,或者稍微扰动的状态。 RandomWalkMetropolis class 还包含函数 one_step,但它需要 'previous_kernel_results',而我没有,因为我希望这是我的第一步。另外,如何进一步指定 Metropolis accept/reject 步骤?

RWM 是一个 python 对象,通过 bootstrap_resultsone_step 方法使用。例如:

# TF/TFP Imports
!pip install --quiet tfp-nightly tf-nightly
import tensorflow.compat.v2 as tf
tf.enable_v2_behavior()
import tensorflow_probability as tfp
tfd = tfp.distributions
tfb = tfp.bijectors
import matplotlib.pyplot as plt


def log_prob(x):
  return tfd.Normal(0, 1).log_prob(x)

kernel = tfp.mcmc.RandomWalkMetropolis(log_prob)
state = tfd.Normal(0, 1).sample()
extra = kernel.bootstrap_results(state)
samples = []
for _ in range(1000):
  state, extra = kernel.one_step(state, extra)
  samples.append(state)

plt.hist(samples, bins=20)