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

时间:2017-06-26 13:28:19

标签: python numpy tensorflow batching

所以我试图使用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有shape(3,)和输出形状(output_dim,output_dim,output_dim),如果三维可视化,我们得到 this visualization

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

但是,如果尝试对一批未知大小进行相同操作,以便输出为(None,output_dim,output_dim,output_dim),则所有内容都会因为解决问题的不同方法而出现不同的,不一致的错误消息

有没有人知道如何通过不同的批量大小来实现这一目标,其中每个批次元素在一批mus和一批sigma中具有相应的mu和sigma?

提前致谢:)

P.S。这是使用张量流0.12,但如果有修复1. *我会考虑重建tensorflow

1 个答案:

答案 0 :(得分:0)

正如朋友所指出的,MultivariateNormalDiag的功能在1.2中有所不同。升级Tensorflow并重新调整一些事情可以解决问题。

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

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

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

一个工作示例是here