无法从张量流中的 TransformedDistribution 获取 log_prob

Unable to get log_prob from a TransformedDistribution in tensorflow

我正在学习有关转换分布的教程。我们可以在以前版本的 tensorflow TransformedDistribution 中指定 batch_shape 到 [2] 和 event_shape 到 [4] 但我们现在不能。我想知道我们是否可以在不回到以前版本的 Tensorflow 的情况下让最后的代码工作?

引发的错误是:

ValueError: `event_ndims must be at least 0. Saw: 1

代码:

# Parameters
n = 10000

loc = 0

scale = 0.5

# Normal distribution
normal = tfd.Normal(loc=loc, scale=scale)

# Set a scaling lower triangular matrix
tril = tf.random.normal((2,4,4))

scale_low_tri = tf.linalg.LinearOperatorLowerTriangular(tril)

# Define scale linear operator
scale_lin_op = tfb.ScaleMatvecLinearOperator(scale_low_tri)

# Define scale linear operator transformed distribution with a batch and event shape
mvn = tfd.TransformedDistribution(distribution=normal, bijector=scale_lin_op)

xn = normal.sample((n,2,4))

mvn2.log_prob(xn)

我相信版本 0.12 你需要使用 tfd.Sample:

mvn = tfd.TransformedDistribution(distribution=tfd.Sample(
                                  tfd.Normal(loc=[loc, loc], scale=[scale, scale]),
                                  sample_shape=[4]), # --> event shape
                                  bijector=scale_lin_op)

mvn.log_prob(xn)

输出:

<tf.Tensor: shape=(10000, 2), dtype=float32, numpy=
array([[-4.5943561e+00, -6.5238861e+01],
       [-8.6548815e+00, -2.1378198e+05],
       [-3.1688419e+01, -3.3126004e+04],
       ...,
       [-1.8664089e+00, -3.8012810e+03],
       [-1.8821844e+01, -1.3414998e+04],
       [-2.3645339e+00, -2.4178730e+05]], dtype=float32)>