TensorFlow:在变量初始化中尝试使用未初始化的值

20
这是我的代码。
import tensorflow as tf

a=tf.Variable(tf.constant([0,1,2],dtype=tf.int32))
b=tf.Variable(tf.constant([1,1,1],dtype=tf.int32))
recall=tf.metrics.recall(b,a)

init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    rec=sess.run(recall)
    print(rec)

我尝试测试tf.metrics.precision并得到了以下错误信息。

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value recall/true_positives/count
     [[Node: recall/true_positives/count/read = Identity[T=DT_FLOAT, _class=["loc:@recall/true_positives/count"], _device="/job:localhost/replica:0/task:0/gpu:0"](recall/true_positives/count)]]
     [[Node: recall/value/_15 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_73_recall/value", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]]

欢迎来到SO!请不要添加代码或错误的截图。请花些时间阅读帮助页面,特别是"我可以在这里问什么样的问题?""我应该避免问哪些类型的问题?"部分。同时,请参观tour并了解如何提出好问题。最后,请学习如何创建一个Minimal, Complete, and Verifiable Example - Markus
@Markus感谢您的评论。我刚刚重新编辑了我的问题。可以吗? - Baoquan Feng
这不仅可以,而且真的很受欢迎。 ;) 最后一点建议:您应该让您的问题更加清晰明了。也许添加有关您尝试解决错误的详细信息将有助于知道答案的人帮助您。 - Markus
1个回答

45

您还需要初始化隐藏在 tf.metrics.recall 方法中的局部变量。

例如,以下代码将起作用:

init_g = tf.global_variables_initializer()
init_l = tf.local_variables_initializer()
with tf.Session() as sess:
    sess.run(init_g)
    sess.run(init_l)

3
感谢您的提问。local_variables_initializer()是什么意思?这个函数是用来初始化本地变量的,例如在TensorFlow中使用tf.metrics.recall()计算召回率时,需要定义本地变量来存储True Positive,False Negative等值。因此,需要在计算召回率之前初始化这些本地变量。local_variables_initializer()会为这些本地变量提供一个初始值,以确保它们包含有效的初始状态。 - Random Certainty
local_variables_initializer 将初始化属于 LOCAL_VARIABLES 集合的变量。最好的描述在这个问题的答案中 https://dev59.com/71kT5IYBdhLWcg3wN86W - pfm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接