Использование tfp.mcmc.MetropolisHastings для физической модели

Я новичок в Tensorflow и хотел бы использовать библиотеку вероятностей Tensorflow для моделирования физической проблемы. Tensorflow поставляется с функцией tfp.mcmc.MetropolisHastings, алгоритмом, который я хочу использовать.

Я предоставил свой первоначальный дистрибутив. В моем случае это двумерная сетка, и в каждой точке сетки находится «вращение» (физика не имеет большого значения), которое может быть либо +1, либо -1. Предложением нового состояния x' должна быть старая сетка с перевернутым одним из этих спинов, так что в одной точке +1 становится -1 или наоборот. Я могу передать аргумент размера шага, но мой x не скаляр, и я могу просто увеличить его. Как мне это смоделировать? Есть ли способ передать правило обновления, которое не просто увеличивает значение на определенный размер шага?


person Pickniclas    schedule 23.07.2019    source источник


Ответы (1)


Я только что ответил на аналогичный вопрос Выполнить шаг RandomWalk с функцией Tensorflow Probability RandomWalkMetropolis

RandomWalkMetropolis принимает аргумент конструктора new_state_fn, который является настраиваемой функцией предложения, которая использует предыдущее состояние и возвращает предложение.

# 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)

def custom_proposal(state, extra):
  return state + tfd.Uniform(-.5, .75).sample()

kernel = tfp.mcmc.RandomWalkMetropolis(log_prob, new_state_fn=custom_proposal)
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)
person Brian Patton    schedule 01.08.2019