0

所以我正在尝试使用 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 维上可视化,我们得到 这个可视化

对于 output_dim = 16 和以半随机方式选择的 mu 和 sigma 以显示每个维度的差异。可以在此处找到完整的工作示例以及我在此处尝试实现的示例[编辑:对于 1.0 及更高版本,需要将 dist.pdf(points) 更改为 dist.prob(points)]

但是,如果对一批未知大小尝试相同的操作,例如输出将是 (None, output_dim, output_dim, output_dim),那么在解决问题的不同方法下,一切都会崩溃,并出现不同的、不一致的错误消息。

有谁知道如何针对不同的批次大小来实现这一点,其中每个批次元素在一批 mus 和一批 sigma 中都有对应的 mu 和 sigma?

提前致谢 :)

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

4

1 回答 1

0

正如朋友指出的,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

于 2017-06-28T09:28:58.933 回答