Tensorflow 会话 returns 作为 'closed'
Tensorflow session returns as 'closed'
我已成功移植 CIFAR-10 ConvNet tutorial code 用于我自己的图像,并且能够训练我的数据并生成 Tensorboard 输出等。
我的下一步是根据我构建的模型对新数据进行评估。我现在正在尝试使用 cifar10_eval.py 作为起点,但是 运行 遇到了一些困难。
我应该指出,原始教程代码运行完全没有问题,包括 cifar10_eval.py。但是,将此特定代码移动到我的应用程序时,我收到以下错误消息(最后一行)。
RuntimeError: Attempted to use a closed Session.
我发现这个错误是由 TF 抛出的 session.py
# Check session.
if self._closed:
raise RuntimeError('Attempted to use a closed Session.')
我检查了所有文件应该驻留和创建的目录,一切看起来都和它应该的完全一样(它们完美地反映了 运行 原始教程代码创建的目录)。它们包括 train、eval 和 data 文件夹,分别包含 checkpoints/events 文件、事件文件和数据二进制文件。
我想知道你是否可以帮助指出我如何调试它,因为我确信在转换代码时数据流中可能有某些东西被中断了。不幸的是,尽管深入挖掘并与原始文件进行比较,但我找不到来源,因为它们本质上相似,只是文件名和目标目录的细微变化。
EDIT_01:
一步步调试,原来真正报错的那一行好像是#106 cifar10_eval.py:
def eval_once(args etc)
...
with tf.Session() as sess:
...
summary = tf.Summary()
summary.ParseFromString(sess.run(summary_op)) # <========== line 106
summary_op
是在同一脚本的 def evaluate
中创建的,并作为参数传递给 def eval_once
。
summary_op = tf.merge_all_summaries()
...
while True:
eval_once(saver, summary_writer, top_k_op, summary_op)
从 documentation 开始,会话可以使用 .close
命令关闭,或者通过 with
块中的上下文管理器使用它时。我做了find tensorflow/models/image/cifar10 | xargs grep "sess"
,但我没有看到任何sess.close
,所以一定是后者。
IE,如果你这样做,你会得到这个错误
with tf.Session() as sess:
sess.run(..)
sess.run(...) # Attempted to use a closed Session.
这是一个简单(但令人羞愧)的缩进错误。
summary = tf.Summary()
summary.ParseFromString(sess.run(summary_op))
summary.value.add(tag='Precision @ 1', simple_value=precision)
summary_writer.add_summary(summary, global_step)
在 try:
块之外,当然找不到会话。
感叹
我已成功移植 CIFAR-10 ConvNet tutorial code 用于我自己的图像,并且能够训练我的数据并生成 Tensorboard 输出等。
我的下一步是根据我构建的模型对新数据进行评估。我现在正在尝试使用 cifar10_eval.py 作为起点,但是 运行 遇到了一些困难。
我应该指出,原始教程代码运行完全没有问题,包括 cifar10_eval.py。但是,将此特定代码移动到我的应用程序时,我收到以下错误消息(最后一行)。
RuntimeError: Attempted to use a closed Session.
我发现这个错误是由 TF 抛出的 session.py
# Check session.
if self._closed:
raise RuntimeError('Attempted to use a closed Session.')
我检查了所有文件应该驻留和创建的目录,一切看起来都和它应该的完全一样(它们完美地反映了 运行 原始教程代码创建的目录)。它们包括 train、eval 和 data 文件夹,分别包含 checkpoints/events 文件、事件文件和数据二进制文件。
我想知道你是否可以帮助指出我如何调试它,因为我确信在转换代码时数据流中可能有某些东西被中断了。不幸的是,尽管深入挖掘并与原始文件进行比较,但我找不到来源,因为它们本质上相似,只是文件名和目标目录的细微变化。
EDIT_01: 一步步调试,原来真正报错的那一行好像是#106 cifar10_eval.py:
def eval_once(args etc)
...
with tf.Session() as sess:
...
summary = tf.Summary()
summary.ParseFromString(sess.run(summary_op)) # <========== line 106
summary_op
是在同一脚本的 def evaluate
中创建的,并作为参数传递给 def eval_once
。
summary_op = tf.merge_all_summaries()
...
while True:
eval_once(saver, summary_writer, top_k_op, summary_op)
从 documentation 开始,会话可以使用 .close
命令关闭,或者通过 with
块中的上下文管理器使用它时。我做了find tensorflow/models/image/cifar10 | xargs grep "sess"
,但我没有看到任何sess.close
,所以一定是后者。
IE,如果你这样做,你会得到这个错误
with tf.Session() as sess:
sess.run(..)
sess.run(...) # Attempted to use a closed Session.
这是一个简单(但令人羞愧)的缩进错误。
summary = tf.Summary()
summary.ParseFromString(sess.run(summary_op))
summary.value.add(tag='Precision @ 1', simple_value=precision)
summary_writer.add_summary(summary, global_step)
在 try:
块之外,当然找不到会话。
感叹