0

我正在实现对角多元学生 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)

我不确定如何解决此错误;有人可以帮助我吗?

4

1 回答 1

0

TensorFlow Probability 提供了一种通过tfd.Independent元分布从标量分布创建向量值分布的方法。这将自动执行log_prob您想要的求和。

如果您真的想自己实现某些东西,那么您遇到的问题听起来像是您没有覆盖event_shapeandevent_shape_tensor方法(以及batch_shapeand batch_shape_tensor)。

最后,通常当人们谈论多元学生 t 分布时,他们指的是此处描述的椭圆分布,这取一维学生 t 分布的乘积然后对其进行线性变换不同。最近,TFP在此处添加了此分布的椭圆变体的实现。它将仿射变换作为输入,您可以使用它来设置分布的位置/相关结构。

于 2018-12-07T19:00:48.650 回答