Python tensorflow cifar10_eval.py error:RuntimeError: Attempted to use a closed Session.RuntimeError: Attempted to use a closed
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/37568980/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
tensorflow cifar10_eval.py error:RuntimeError: Attempted to use a closed Session.RuntimeError: Attempted to use a closed Session
提问by karl_TUM
I'm running the cifar10 network on my PC and after finishing the training and running eval script the following error appears:
我在我的 PC 上运行 cifar10 网络,在完成训练并运行 eval 脚本后,出现以下错误:
2016-06-01 14:37:14.238317: precision @ 1 = 0.000
Traceback (most recent call last):
File "<ipython-input-1-adf2ca85bb77>", line 1, in <module>
runfile('/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test/cifar10_eval_test.py', wdir='/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test')
File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 685, in runfile
execfile(filename, namespace)
File "/usr/lib/python3/dist-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 85, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test/cifar10_eval_test.py", line 107, in <module>
tf.app.run()
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/platform/default/_app.py", line 30, in run
sys.exit(main(sys.argv))
File "/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test/cifar10_eval_test.py", line 104, in main
evaluate()
File "/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test/cifar10_eval_test.py", line 94, in evaluate
eval_once(saver, summary_writer, top_k_op, summary_op)
File "/home/kang/Documents/work_code_PC1/py_tensorflow_learning/cifar10CNN_test/cifar10_eval_test.py", line 72, in eval_once
coord.join(threads, stop_grace_period_secs = 10)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/coordinator.py", line 264, in join
six.reraise(*self._exc_info_to_raise)
File "/usr/lib/python3/dist-packages/six.py", line 659, in reraise
raise value
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/queue_runner.py", line 185, in _run
sess.run(enqueue_op)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 315, in run
return self._run(None, fetches, feed_dict)
File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/client/session.py", line 473, in _run
raise RuntimeError('Attempted to use a closed Session.')
RuntimeError: Attempted to use a closed Session.
what does the closed Session mean? Should the train.py and eval.py run at the same time? I am new in tensorflow and type myself according to the demo codes https://www.tensorflow.org/versions/r0.8/tutorials/deep_cnn/index.html
关闭的会话是什么意思?train.py 和 eval.py 应该同时运行吗?我是 tensorflow 的新手,根据演示代码https://www.tensorflow.org/versions/r0.8/tutorials/deep_cnn/index.html自己输入
回答by mrry
Looking at the code you posted, the problem is between lines 50 and 51 in eval_once()
:
查看您发布的代码,问题出在第 50 行和第 51 行之间eval_once()
:
with tf.Session() as sess:
ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir)
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, ckpt.model_checkpoint_path)
global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1]
else:
print('No checkpoint file found')
return
# <<< The Session is closed here >>>
coord = tf.train.Coordinator()
try:
# ...
When the code exits a with tf.Session() as sess:
block, sess
is automatically closed, and you cannot use it any more. There are (at least) two ways to fix this problem:
当代码退出一个with tf.Session() as sess:
块时,sess
会自动关闭,你不能再使用它了。有(至少)两种方法可以解决此问题:
Indent lines 51 through 76by 4 spaces, so that they are also inside the
with
block.Create the session without using a
with
block and close it manually:def eval_once(): sess = tf.Session() ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) if ckpt and ckpt.model_checkpoint_path: saver.restore(sess, ckpt.model_checkpoint_path) global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] else: print('No checkpoint file found') sess.close() return coord = tf.train.Coordinator() try: # ... finally: sess.close()
将第 51 行到第 76行缩进4 个空格,以便它们也在
with
块内。在不使用
with
块的情况下创建会话并手动关闭它:def eval_once(): sess = tf.Session() ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) if ckpt and ckpt.model_checkpoint_path: saver.restore(sess, ckpt.model_checkpoint_path) global_step = ckpt.model_checkpoint_path.split('/')[-1].split('-')[-1] else: print('No checkpoint file found') sess.close() return coord = tf.train.Coordinator() try: # ... finally: sess.close()