所以我试图使用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),如果三维可视化,我们得到
表示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
答案 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