Tensorflow 实现多元学生 T 对角分布
Tensorflow Implement Multivariate Student T diagonal distribution
我正在实现对角多元学生 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]
作为输入,return pdf 形状为 [batch_size,]
然而,当我调用 Q.log_prob(x)
;我收到错误 ValueError: event_ndims (0) must be larger than min_event_ndims (1)
我不确定如何解决这个错误;有人可以帮助我吗?
TensorFlow Probability 提供了一种通过 tfd.Independent 元分布从标量分布创建向量值分布的方法。这将自动执行您想要的 log_prob
中的求和。
如果你真的想自己实现,你遇到的问题听起来像是你没有覆盖 event_shape
和 event_shape_tensor
方法(以及 batch_shape
和batch_shape_tensor
).
最后,通常当人们谈论多元学生 t 分布时,他们指的是描述的椭圆分布 here, which is not the same thing as taking a product of 1D Student-t's distributions and then linearly transforming them. Recently, TFP added an implementation of the elliptical variant of this distribution here。它采用仿射变换作为输入,您可以使用它来设置分布的 location/correlation 结构。
我正在实现对角多元学生 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]
作为输入,return pdf 形状为 [batch_size,]
然而,当我调用 Q.log_prob(x)
;我收到错误 ValueError: event_ndims (0) must be larger than min_event_ndims (1)
我不确定如何解决这个错误;有人可以帮助我吗?
TensorFlow Probability 提供了一种通过 tfd.Independent 元分布从标量分布创建向量值分布的方法。这将自动执行您想要的 log_prob
中的求和。
如果你真的想自己实现,你遇到的问题听起来像是你没有覆盖 event_shape
和 event_shape_tensor
方法(以及 batch_shape
和batch_shape_tensor
).
最后,通常当人们谈论多元学生 t 分布时,他们指的是描述的椭圆分布 here, which is not the same thing as taking a product of 1D Student-t's distributions and then linearly transforming them. Recently, TFP added an implementation of the elliptical variant of this distribution here。它采用仿射变换作为输入,您可以使用它来设置分布的 location/correlation 结构。