관리 메뉴

솜씨좋은장씨

[TF1.x] Tensorflow RuntimeError: Attempted to use a closed Session 오류 해결 방법 본문

머신러닝 | 딥러닝/TensorFlow | Keras

[TF1.x] Tensorflow RuntimeError: Attempted to use a closed Session 오류 해결 방법

솜씨좋은장씨 2021. 1. 8. 02:49
728x90
반응형

with tf.Session() as sess:
  # Initialize TensorFlow variables sess.run(tf.global_variables_initializer())
  sess.run(tf.global_variables_initializer())
  for step in range(10001):
    cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data}) 
    if step % 200 == 0:
      print(step, cost_val)
  # Accuracy report
h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)

친구의 과제를 도와주던 중 위와 같이 with tf.Session() as sess: 를 활용하였을 때

아래와 같이 Attempted to use a closed Session. 이라는 오류가 나는 것을 보았습니다.

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-69-1b454afcd20f> in <module>()
      7       print(step, cost_val)
      8   # Accuracy report
----> 9 h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
     10 print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)

1 frames
/tensorflow-1.15.2/python3.6/tensorflow_core/python/client/session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
   1101     # Check session.
   1102     if self._closed:
-> 1103       raise RuntimeError('Attempted to use a closed Session.')
   1104     if self.graph.version == 0:
   1105       raise RuntimeError('The Session graph is empty.  Add operations to the '

RuntimeError: Attempted to use a closed Session.

이 글에서는 이 오류를 해결하는 방법을 적어보려 합니다.

 

원인

먼저 해당 오류가 발생하는 원인은 with tf.Session() as sess:를 활용하면

학습이 끝나고 나면 sess ( Session )를 알아서 자동으로 close를 하였는데

with 바깥에서 다시 sess를 호출하려고 할 때 이미 close 된 sess를 호출 하려고 하여 발생하는 문제입니다.

 

해결 방법

먼저 위의 코드에서는 

h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})

이 부분을 with 범위 안으로 넣어주면 됩니다.

with tf.Session() as sess:
  # Initialize TensorFlow variables sess.run(tf.global_variables_initializer())
  sess.run(tf.global_variables_initializer())
  for step in range(10001):
    cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data}) 
    if step % 200 == 0:
      print(step, cost_val)
  # Accuracy report
  h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
  print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)

 

다른 방법은 with tf.Session() as sess:를 사용하지 않고 sess = tf.Session() 을 활용하는 방법입니다.

sess = tf.Session()
# Initialize TensorFlow variables sess.run(tf.global_variables_initializer())
sess.run(tf.global_variables_initializer())
for step in range(10001):
  cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data}) 
  if step % 200 == 0:
    print(step, cost_val)
# Accuracy report
h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)
sess.close()

sess = tf.Session()을 활용할 경우 마지막에 모든 작업이 끝나고 난 후 sess.close( )로 close 해주면 됩니다.

 

읽어주셔서 감사합니다.

Comments