Tensorflow Внедрить многомерное диагональное распределение Стьюдента T - PullRequest
0 голосов
/ 28 ноября 2018

Я реализую диагональное многомерное распределение студентов t (так что logP (x1, x2, x3, .. xD) = logP (x1) + logP (x2) + .... + logP (xD)), так чтоон может использоваться как базовое распределение для биекторов в TensorFlow

import tensorflow_probability as tfp
tfd = tfp.distributions

D = 2 # number of dimension
df = 5. # degree of freedom

# construct D univariate student t distribution

base_dist = tfd.StudentT(loc=tf.constant([0.] * D,dtype=DTYPE),
                         scale = tf.constant([1.] * D,dtype=DTYPE),
                         df = tf.constant([df],dtype=DTYPE))

Q = tfd.TransformedDistribution(distribution=base_dist,bijector=Chain)
# where Chain is a tfb.Chain() object that a sequence of bisector numbers

Я изменяю tfd.StudentT.log_prob() так, чтобы он суммировался по последним осям.Он принимает форму [batch_size,dim] в качестве ввода и возвращает pdf с формой [batch_size,]

Однако, когда я звоню Q.log_prob(x);Я получил ошибку ValueError: event_ndims (0) must be larger than min_event_ndims (1)

Я не уверен, как исправить эту ошибку;может кто-нибудь мне поможет?

1 Ответ

0 голосов
/ 07 декабря 2018

TensorFlow Probability предоставляет способ создания векторно-значных распределений из скалярных распределений с помощью мета-распределения tfd.Independent .Это автоматически выполнит суммирование в log_prob, которое вы хотите.

Если вы действительно хотите реализовать что-то самостоятельно, проблема, с которой вы столкнулись, звучит так, как будто вы не перекрыли event_shape и event_shape_tensorметоды (наряду с batch_shape и batch_shape_tensor).

Наконец, обычно, когда люди говорят о многомерном распределении по студентам, они имеют в виду эллиптическое распределение, описанное здесь , которое не то же самое, что взять произведение 1D-распределений Стьюдента-т и затем их линейно преобразовать.Недавно TFP добавил реализацию эллиптического варианта этого дистрибутива здесь .В качестве входных данных используется аффинное преобразование, которое можно использовать для настройки структуры местоположения / корреляции распределения.

...