TensorFlow:无法调用 streaming_sparse_precision_at_k

TensorFlow: Can't invoke streaming_sparse_precision_at_k

在尝试计算 precision@k 时,出现异常。以下是重现问题的简单代码。

首先代码定义变量作用域:

initializer = tf.random_uniform_initializer(-0.1, 0.1, seed=1234)
with tf.variable_scope("model", reuse=None, initializer=initializer)

然后调用这些行:

predictions = tf.Variable(tf.ones([2, 10], tf.int64))
labels = tf.Variable(tf.ones([2, 1], tf.int64))
precision = tf.contrib.metrics.streaming_sparse_precision_at_k(predictions, labels, 5)
tf.initialize_all_variables().run()    

(我知道这段代码没有意义,尝试计算给定2个固定矩阵的精度...)

然后我得到以下异常:

W tensorflow/core/framework/op_kernel.cc:936] Failed precondition: Attempting to use uninitialized value model/precision_at_5/false_positive_at_5 [[Node: model/precision_at_5/false_positive_at_5/read = IdentityT=DT_DOUBLE, _class=["loc:@model/precision_at_5/false_positive_at_5"], _device="/job:localhost/replica:0/task:0/gpu:0"]]

当我尝试调用 streaming_sparse_recall_at_k 而不是 streaming_sparse_precision_at_k 时也是如此。
安装的版本是 linux 上的 r0.10 和 python 2.7.

请帮忙...提前致谢:)

不幸的是,tf.initialize_all_variables() doesn't initialize "local" variables (which tend to be internal implementation details for ops like tf.contrib.metrics.streaming_sparse_precision_at_k() and tf.train.string_input_producer(),而不是用作模型权重的变量)。

您需要在 运行 评估操作之前向运行 tf.initialize_local_variables() 的程序添加一行:

sess.run(tf.initialize_local_variables())  # or `tf.initialize_local_variables().run()`