【问题标题】:TensorFlow FailedPreconditionError when using variables from the tf.metric module [duplicate]使用 tf.metric 模块中的变量时出现 TensorFlow FailedPreconditionError [重复]
【发布时间】:2017-12-12 00:27:43
【问题描述】:

我尝试通过利用 tf.metrics 子模块中的函数(例如 tf.metrics.accuracy(y_labels, y_predicted) 和用于精度或召回率的等效项)向我的 CNN 训练代码添加一些额外的测量值。这与他们建议的大多数教程相反:

accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

而我的实现将这一行替换为:

accuracy = tf.metrics.accuracy(y_labels, y_predicted)

现在,即使我在 with tf.Session() as sess: 块中执行 sess.run(tf.initialize_all_variables()),尝试使用 tf.metrics.accuracy 函数时仍然收到以下错误:

FailedPreconditionError (see above for traceback): Attempting to use uninitialized value performance/accuracy/count
 [[Node: performance/accuracy/count/read = Identity[T=DT_FLOAT, _class=["loc:@performance/accuracy/count"], _device="/job:localhost/replica:0/task:0/cpu:0"](performance/accuracy/count)]]

最值得注意的是,用 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 替换 accuracy = tf.metrics.accuracy(y_labels, y_predicted) 行可以解决问题,但是,我想在不手动执行的情况下实现其他指标,例如精度、召回率等。

【问题讨论】:

    标签: python tensorflow neural-network conv-neural-network tensorboard


    【解决方案1】:

    TL;DR:在会话开头添加以下行:

    sess.run(tf.local_variables_initializer())
    

    混淆源于(如frankyjuang points out)已弃用的tf.initialize_all_variables() 函数的名称。这个函数被弃用的部分原因是它的名字有误:它实际上并没有初始化 all 变量,而是只初始化 global(不是 local ) 变量。 根据tf.metrics.accuracy() 函数的文档(强调添加):

    accuracy 函数创建两个本地 变量totalcount,用于计算predictions 匹配labels 的频率。

    因此,您需要为局部变量添加显式初始化步骤,可以使用tf.local_variables_initializer() 来完成,如上所述。

    【讨论】:

      【解决方案2】:

      sess.run(tf.initialize_all_variables()) 已弃用。

      请改用sess.run(tf.global_variables_initializer()) 来解决您的问题。

      参考

      根据tf.initialize_all_variables的文档,

      此功能已弃用。它将在 2017-03-02 之后删除。更新说明:改用 tf.global_variables_initializer。

      【讨论】:

      • 我也试过 tf.global_variables_initializer() 。值得庆幸的是,正如 mrry 指出的那样,initialize_all_variables 实际上并没有像我认为的那样初始化所有变量。 tf.local_variables_initializer() 适用于这个用例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2016-08-14
      • 1970-01-01
      • 2018-12-14
      相关资源
      最近更新 更多