Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow Can';t通过优化学习tf.contrib.distributions.MultivariantNormalDiag的参数_Tensorflow - Fatal编程技术网

Tensorflow Can';t通过优化学习tf.contrib.distributions.MultivariantNormalDiag的参数

Tensorflow Can';t通过优化学习tf.contrib.distributions.MultivariantNormalDiag的参数,tensorflow,Tensorflow,工作示例: import numpy as np import tensorflow as tf ## construct data np.random.seed(723888) N,P = 50,3 # number and dimensionality of observations Xbase = np.random.multivariate_normal(mean=np.zeros((P,)), cov=np.eye(P), size=N) ## construct model X

工作示例:

import numpy as np
import tensorflow as tf

## construct data
np.random.seed(723888)
N,P = 50,3 # number and dimensionality of observations
Xbase = np.random.multivariate_normal(mean=np.zeros((P,)), cov=np.eye(P), size=N)

## construct model
X      = tf.placeholder(dtype=tf.float32, shape=(None, P), name='X')
mu     = tf.Variable(np.random.normal(loc=0.0, scale=0.1, size=(P,)), dtype=tf.float32, name='mu')
xDist  = tf.contrib.distributions.MultivariateNormalDiag(loc=mu, scale_diag=tf.ones(shape=(P,), dtype=tf.float32), name='xDist')
xProbs = xDist.prob(X, name='xProbs')

## prepare optimizer
eta       = 1e-3 # learning rate
loss      = -tf.reduce_mean(tf.log(xProbs), name='loss')
optimizer = tf.train.AdamOptimizer(learning_rate=eta).minimize(loss)

## launch session
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    sess.run(optimizer, feed_dict={X: Xbase})
我想在tensorflow中对多元高斯分布的参数进行优化,就像我上面的例子一样。我可以成功地运行像sess.run(loss,feed_dict={X:Xbase})这样的命令,因此我已经正确地实现了分发。当我尝试运行优化操作时,会收到一条奇怪的错误消息:

InvalidArgumentError: -1 is not between 0 and 3
     [[Node: gradients_1/xDist_7/xProbs/Prod_grad/InvertPermutation = InvertPermutation[T=DT_INT32, _device="/job:localhost/replica:0/task:0/cpu:0"](gradients_1/xDist_7/xProbs/Prod_grad/concat)]]

Caused by op 'gradients_1/xDist_7/xProbs/Prod_grad/InvertPermutation'
我不明白


如果使用
tf.contrib.distributions.multivarianentormalfallconvariation
而不是
tf.contrib.distributions.multivarianentormaldiag
,则会收到相同的错误消息。如果变量被优化过,我不会得到错误。

我仍在寻找失败的原因,但对于短期修复,进行以下更改是否有效

xLogProbs = xDist.log_prob(X, name='xLogProbs')
loss      = -tf.reduce_mean(xLogProbs, name='loss')

注意:这实际上比
tf.log(xProbs)
更可取,因为它的数值精度从来都不低,有时甚至更精确。(所有tf.Distributions都是如此。)

我仍在寻找失败的原因,但对于短期修复,进行以下更改是否有效

xLogProbs = xDist.log_prob(X, name='xLogProbs')
loss      = -tf.reduce_mean(xLogProbs, name='loss')

注意:这实际上比
tf.log(xProbs)
更可取,因为它的数值精度从来都不低,有时甚至更精确。(所有tf.发行版都是如此。)

使用
.log\u prob
有效。谢谢我没有太多地使用
tf.Distributions
。我已经找到了问题所在。TF的发布版本似乎没有正确处理
reduce\u prod
的负索引。该问题已在master中修复。在任何情况下,
log\u prob
是首选。还要注意:由于此处过于复杂的原因,最好使用
tf.get_variable
而不是
tf.variable
。祝你好运!使用
.log\u prob
有效。谢谢我没有太多地使用
tf.Distributions
。我已经找到了问题所在。TF的发布版本似乎没有正确处理
reduce\u prod
的负索引。该问题已在master中修复。在任何情况下,
log\u prob
是首选。还要注意:由于此处过于复杂的原因,最好使用
tf.get_variable
而不是
tf.variable
。祝你好运!