Tensorflow Внедрить многомерное диагональное распределение Стьюдента Т

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

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

0 ответов

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

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

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

Другие вопросы по тегам