2017-08-16 25 views
0

我想使用tensorlfow.metrics.recalltensorlfow.metrics.precision,但tensorflow引起FailedPreconditionError。請注意,我用sess.run(tf.global_variables_initializer())FailedPreconditionError使用tensorlfow.metrics.recall時

的代碼如下:

import numpy as np 
import tensorflow as tf 

y_true = np.array([[1, 1, 0], [0, 1, 1], [0, 0, 1]]) 
y_pred = np.array([[1, 0, 0], [1, 0, 1], [0, 0, 1]]) 

predictions = tf.placeholder(tf.int64, shape=[3, 3]) 
labels = tf.placeholder(tf.int64, shape=[3, 3]) 
prec = tf.metrics.precision(labels, predictions) 
rec = tf.metrics.recall(labels, predictions) 
with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    p, r = sess.run([prec, rec], feed_dict={predictions: y_pred, labels: y_true}) 
    print("precision: {}, recall: {}".format(p, r)) 
  • tensorflow版本:1.2.1
  • Python版本:3.5.2

回答

1

tf.metrics.precisiontf.metrics.recall內部創建local variable(使用collections=[tf.GraphKeys.LOCAL_VARIABLES]創建的變量)。所以你需要做:sess.run(tf.local_variables_initializer())

+0

它的工作原理,謝謝。順便說一句,爲什麼不只是創建一個函數,初始化**所有**變量(本地和全局)?這裏有什麼設計關注將局部變量與全局變量分開? – xiaohan2012

+0

剛剛發現有這樣的函數'tf.initialize_all_variables'。 – xiaohan2012

+1

不推薦使用'tf.initialize_all_variables'。你應該使用上面的一個。 –

相關問題