我正在尝试评估Tensorflow中转换的多变量分布的log pdf。虽然它将正确采样,但它为一个样本产生两个单独的对数概率。示例示例为
[[ 1.05516054e-03, 1.50635891e+01]]
将返回日志概率
[[ 2.64074564, -4.21384382]]
而不是单个对数概率。
为了使这个更清楚,我附上了我希望是一个可重复的例子。
from tensorflow.contrib.distributions.python.ops import bijectors as bijector
ds = tf.contrib.distributions
mean = tf.constant([-5., 15.])
chol = tf.constant([[0.77909118, 0.],
[-0.02230092, 0.8150183]])
mvn_sftpls = ds.TransformedDistribution(distribution=ds.MultivariateNormalTriL(
loc=mean, scale_tril=chol), bijector=bijector.Softplus())
sample = mvn_sftpls.sample(1)
output = mvn_sftpls.log_prob(sample)
with tf.Session() as sess:
print(sess.run(output))
答案 0 :(得分:1)
对于后验性(以及将来),在Tensorflow的夜间版本中(我猜测下一个版本),这应该是自动推断的,因此您不需要指定event_ndims = 1。
答案 1 :(得分:0)
答案(对于任何好奇的人)是将softplus bijector中的event_ndims设置为多变量范数中适当数量的维度。就我而言:
bijector=bijector.Softplus(event_ndims = 1)