tenorflow cifar10_eval.py Ошибка: RuntimeError: Попытка использовать закрытый Session.RuntimeError: Попытка использовать закрытый Session

Я запускаю сеть 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.

что означает закрытая сессия? Должны ли train.py и eval.py работать одновременно? Я новичок в tenorflow и набираю себя в соответствии с демонстрационными кодамиhttps://www.tensorflow.org/versions/r0.8/tutorials/deep_cnn/index.html

 karl_TUM01 июн. 2016 г., 15:12
Я набираю python3 cifar10_eval_test.py в терминале. Это также имеет ту же ошибку: RuntimeError: Попытка использовать закрытый сеанс.
 Olivier Moindrot01 июн. 2016 г., 16:33
Хорошо, я думаю, вы используетеэтот урок, Вы должны добавить эту информацию в свой вопрос, чтобы люди могли понять, какой код вы используете.
 pepe01 июн. 2016 г., 21:37
Можете ли вы уточнить, в какой последовательности вы запускаете ваши файлы? вы можете успешно запустить cifar10_train?
 karl_TUM02 июн. 2016 г., 11:31
Сначала я запускаю cifar10_train, и он работает, после того как я получил обученную модель, затем я запускаю cifar10_eval. Это не удается. Я загружаю свой код на GitHub:github.com/JianKangtum/tensorflow_cifar10_test
 karl_TUM01 июн. 2016 г., 16:26
Я новичок в глубоком обучении и просто набираю демо-коды снова в соответствии с примером tenorflow. Я могу отправить их вам по электронной почте, если все в порядке.
 Olivier Moindrot01 июн. 2016 г., 15:05
Работает ли это при запуске скриптов вне ipython?
 karl_TUM02 июн. 2016 г., 11:34
Вы можете скачать и пройти тест. Я не знаю, где происходит ошибка. Большое спасибо.
 Olivier Moindrot01 июн. 2016 г., 16:12
Откуда ваш скрипт на Python? Можете ли вы дать ссылку, пожалуйста

Ответы на вопрос(1)

Решение Вопроса

Смотря накод, который вы разместилипроблема между строками 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:
    # ...

Когда код выходит изwith tf.Session() as sess: блок,sess автоматически закрывается, и вы больше не можете его использовать. Есть (по крайней мере) два способа решить эту проблему:

Отступы строки 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()
 karl_TUM05 июн. 2016 г., 12:36
Большое спасибо. Оно работает.

Ваш ответ на вопрос