Tensorflow MultivariateNormalDiag 张量形状 (None, output_dim, output_dim, output_dim) 给定 mu 和 sigma 形状 (None, 3)

Tensorflow MultivariateNormalDiag tensor of shape (None, output_dim, output_dim, output_dim) given mu and sigma of shape (None, 3)

所以我正在尝试使用 MultivariateNormalDiag

制作多元高斯张量

我想像这样为 mu 和 sigma 参数提供两个形状为 (None, 3) 的张量

dist = tf.contrib.distributions.MultivariateNormalDiag(mu, sigma)

这样我就可以提供一组点,在这种情况下

dim_range = [float(i) for i in range(0, max_size)]
points = [[a,b,c] for a in dim_range for b in dim_range for c in dim_range]

并检索一组密度正态分布在 mu 周围的点,如

gauss_tensor = tf.reshape(
    dist.pdf(points), 
    shape=(None, output_dim, output_dim, output_dim)
)

举一个例子,例如。 mu 和 sigma 具有形状 (3,) 和输出形状 (output_dim, output_dim, output_dim),如果以 3 维方式可视化,我们得到

for output_dim = 16 并且以半随机方式选择 mu 和 sigma 以显示每个维度的方差。可以找到完整的工作示例 here and an example of what i'm trying to achieve here [编辑:从 1.0 开始,dist.pdf(points) 需要更改为 dist.prob(points)]

但是,如果对未知大小的批次进行同样的尝试,则输出将是 (None、output_dim、output_dim、output_dim) , 鉴于解决问题的不同方法,一切都会崩溃,并显示不同的、不一致的错误消息。

有谁知道如何针对不同的批量大小完成此操作,其中每个批量元素在一批 mus 和一批 sigma 中都有相应的 mu 和 sigma?

提前致谢:)

p.s。这是使用 tensorflow 0.12 但如果 1.* 中有修复,我会考虑重建 tensorflow

正如朋友指出的,MultivariateNormalDiag 的功能在 1.2 中有所不同。升级 Tensorflow 并重新调整一些东西解决了这个问题。

mu_placeholder = tf.placeholder(
    dtype=tf.float32,
    shape=(None, None, 3),
    name='mu-tensor')

[编辑:对于 mus/sigmas (None, 1, 3) 也给出了正确的结果]

mu_placeholder = tf.placeholder(
    dtype=tf.float32,
    shape=(None, 1, 3),
    name='mu-tensor')

一个有效的例子是here