我尝试使用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)
现在,即使我在sess.run(tf.initialize_all_variables())
块中执行with tf.Session() as sess:
,但在尝试使用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.metrics.accuracy(y_labels, y_predicted)
行替换为accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
可以解决问题,但是,我想实现其他指标,如精确度,召回等,而无需手动执行。
答案 0 :(得分:2)
TL; DR:在会话开始时添加以下行:
sess.run(tf.local_variables_initializer())
混淆源于(作为frankyjuang points out)已弃用的tf.initialize_all_variables()
函数的名称。此功能部分被弃用,因为它被错误命名:它实际上并未初始化所有变量,而只是初始化全局(不是本地 )变量。
根据{{3}}函数的文档(强调添加):
accuracy
函数会创建两个本地变量,total
和count
,用于计算predictions
匹配的频率{{ 1}}。
因此,您需要为局部变量添加显式初始化步骤,可以使用tf.metrics.accuracy()
完成,如上所述。
答案 1 :(得分:-1)
sess.run(tf.initialize_all_variables())
已被弃用。
使用sess.run(tf.global_variables_initializer())
来解决您的问题。
根据tf.initialize_all_variables的文件,
此功能已被弃用。它将在2017-03-02之后删除。更新说明:改为使用tf.global_variables_initializer。