1. 왜 텐서플로 세션을 이해해야 하는가?
딥러닝을 공부하다 보면
텐서의 내용물과 연산결과를 확인하고 싶을 때가 많습니다.
그렇기 때문에 텐서플로 세션에 대해 이해하는 것이
텐서플로를 이해하는 지름길이라고 생각합니다.
스스로 확인하면서 이해를 높여가기 위함입니다.
2. 세션 작동법
세션 작동은 크게 3부분으로 이루어집니다.
세션 선언문은 세션을 만들어 주는 역할을 합니다.
지금부터 sess라는 변수에 세션을 하나 할당하겠다는 의미입니다.
세션은 기본적으로 크게 2가지가 있는데,
tf.Session()과 tf.InteractiveSession()입니다.
tf.InteractiveSession은 자동으로 터미널에 default session을 할당하지만,
tf.Session은 그렇지 않기 때문에
항상 with 절과 사용해야 하는 차이점이 있습니다.
세션 실행문은 sess.run() 함수로 실행됩니다.
괄호 안에 텐서나 텐서연산을 넣어서 실행을 해주면 됩니다.
텐서 종료문은 sess.close() 함수로 실행이 됩니다.
단, 이 종료문은 with 절에서는 굳이 안써줘도 무방합니다.
3. 코드 실습
import tensorflow as tf
a = tf.constant(2)
b = tf.constant(3)
c = tf.multiply(a, b)
위의 코드는 텐서플로 라이브러리를 불러와서
a, b, c 라는 텐서를 생성하는 코드입니다.
a, b는 상수로, c는 a와 b를 곱한 결과를 담았습니다.
# session -> 일종의 실행창
sess = tf.Session() # 세션 선문
sess.run(tf.global_variables_initializer()) # 변수 초기화 -> 습과화하는 것이 좋아요
print(sess.run(c)) # 세션 실행문
# print(c.eval()) # 오류 발생 -> default session이 지정되지 않았기 때문.
sess.close() # 세션 종료문
설명은 코드 주석으로 대체하겠습니다.
여기서 eval() 함수는 작동하지 않습니다.
텐서는 세션 내에서만 작동합니다.
그런데 eval() 함수는 세션을 거치지 않고
c라는 텐서에 담겨있는 결과를 볼 수 있는 기본명령어입니다.
eval()이 작동하기 위해서는
세션 밖에서 c라는 텐서를 보기 위한
기본(default) 세션이 지정되어야 합니다.
tf.Session()은 default 세션을 지정해주지 않습니다.
defalut 세션을 지정해주려면 다른 명령어를 사용하거나,
with 절과 함께 사용,
tf.InteractiveSession() 명령어를 써줘야합니다.
또한 세션 종료문으로 세션을 종료해주시는 것도 잊지 말아주세요.
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(c))
print(c.eval()) # with 절에서는 해당 명령어가 잘 작동합니다.
with 절에서는 tf.close()를 써주지 않아도 무방합니다.
또한 여기서 c.eval() 함수는 제대로 동작합니다.
with 절 내에서 세션선언이 default로 되어있기 때문입니다.
sess = tf.InteractiveSession() # 자동으로 default session을 지정해줌
sess.run(tf.global_variables_initializer())
print(c.eval()) # 제대로 작동
print(sess.run(c))
sess.close()
자동으로 defalut 세션을 지정해주는
InteractiveSession 선언문입니다.
c.eval() 이 제대로 작동하는 것을 보면
default 세션이 제대로 작동하는 것을 알 수 있습니다.
with 절을 쓰지 않았기 때문에
sess.close() 문도 써주는 것을 잊지 마세요.
4. 정리
정리하자면 Session을 동작하는 방법에는
크게 2가지가 있다고 보시면 됩니다.
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(c))
print(c.eval())
위와 같이 with 절과 함께 Session을 쓰는 것이
첫번째 방법입니다.
가장 대중적으로 쓰이는 방법이기도 합니다.
sess = tf.InteractiveSession() # 자동으로 default session을 지정해줌
sess.run(tf.global_variables_initializer())
print(c.eval()) # 제대로 작동
print(sess.run(c))
sess.close()
두번재 방법은 위와 같이
InteractiveSession 선언을 해주는 것입니다.
하지만 이는 세선 종료문을 써줘야 한다는
번거로움이 있기도 합니다.
오늘 포스팅은 여기서 마치겠습니다.
감사합니다.
'딥러닝 공부 > Tensorflow' 카테고리의 다른 글
[tensorflow 2.0] 본격 where 함수 해부! broadcasting 기능까지! (1) | 2019.07.19 |
---|---|
[tensorflow] 텐서플로를 이용한 논리연산 (2) | 2019.07.13 |
[tensorflow] 텐서플로를 이용한 사칙연산 (0) | 2019.07.11 |
[tensorflow] tf.constant, tf.Variable, tf.get_variable (4) | 2019.07.09 |