본문 바로가기

Deep Learning/Keras & Tensorflow

Tensorflow 개념 정리) 텐서, 변수, 오퍼레이션, 계산 그래프

320x100
320x100

 

 

 

MNIST 분류 문제를 공부할 때만 해도 사용법 익히기에 급급했기 때문에 tensorflow를 제대로 이해하고 다루진 않았었다.

 

일반적인 파이썬 코드 구현하고는 다르게 

 

tensorflow는 계산 그래프에 노드( = 연산, 계산, 오퍼레이션 )을 추가하고 session을 통해 실행해줘야 하는 구조라고만 이해하고 넘겼다.

 

tf.placeholder( ), tf.layers.conv2d( ), tf.train.AdamOptimizer( )와 같은 함수들로 계산 그래프를 그려가며 모델을 설계하고,

 

tf.Session( ).run( )으로 그려진 계산 그래프를( = 설계된 모델을 ) 실제로 실행하는 구조라고만 이해했었다.

 

+ X = tf.placeholder( tf.float32, None) 의 경우,
   X는 tf.placeholder( ) 가 계산 그래프에 등록하는 operator의 output tensor 를 가리킨다는 것

 

+ sess.run( )에는 텐서를 넣어주고, Session은 입력된 텐서와 연결된 오퍼레이션을 실행하는 구조라는 것

 

 

 

뭐 틀린 말은 아니었고 이것만 알고있어도 코딩하는데는 큰 어려움이 없었다.

 

그러다 어떤 흐름을 갖는 건지 제대로 확이해야할 필요가 생겨서 좀 더 공부해봤다.

 

지금도 아직은 아리송한 느낌이 있지만.. 지금까지 공부하며 깨우친 걸 일단 글로 남겨보고자 한다.

 

 


 

 

tensorflow를 import 하면 자동으로 default graph 가 생성된다.

 

그리고 default graph는 tf.get_default_graph( ) 로 받아줄 수 있다.

 

 

 


 

 

모델 설계에 사용하는 tf.placeholder( ), tf.layers.conv2d( ) 와 같은 함수들은

 

오퍼레이션의 output tensor를 반환하며 내부적으로는 계산 그래프에 오퍼레이션을 추가한다.

 

 

 

X는 tf.placeholder( )가 반환한 output tensor를 가리키고, default graph에는 operator들이 추가된 걸 확인할 수 있다.

 

 


 

 

 

X가 가리키고 있는 output tensor는 내부함수를 통해 해당 텐서를 내뱉은 operator로 접근할 수 있다.

 

그리고 default graph에 추가된 operator들은 get_operations( ) 함수로 불러올 수 있다.

 

 

이 둘을 X.op is op  로 확인해보면 같다는 결과를 얻을 수 있다.

 

 


 

 

마찬가지로 tensor도 불러올 수 있고 이 역시 같은 지 확인해 줄 수 있다

 

 

op.outputs 으로 해당 operator의 output tensor를 받아올 수 있다.

 

 


 

 

알아둘 점은 tf.layers.conv2d( ) 와 같은 함수들은 tf.placeholder( ) 와 같이 하나의 operation만 추가하는 게 아니라

 

관련된 operation들을 모두 추가한다는 점이다.

 

 

그리고 파이썬 변수 conv 에는 최종적으로 출력되는 tensor 가 반환되게 된다.

 

여기서는 conv2d/BiasAdd 의 output tensor가 되겠다.

 

 

 


 

 

X = tf.placeholder(tf.float32, (None, 28, 28, 1), name = 'INPUT') 에서 name으로 설정해주는 대상은

 

사실 텐서가 아니라 텐서와 연결된 오퍼레이션이다. 

 

 

X.name 에서 INPUT 뒤에 붙는 ' : 0 ' 은 output tensor의 index에 해당한다.

 

 

이름이 INPUT인 오퍼레이션은 텐서를 원소로 담고있는 리스트를 반환하는데,

이들 중 index = 0 에 담겨있는 텐서가 X 라는 말이다.

 

 


 

 

흐름을 정리하면 아래 그림과 같다.

 

 

 

 

 

< 참고 사이트 >

 

https://dohkstalks.blogspot.com/2017/01/tensorflow-concept-tensorflow.html

 

https://webnautes.tistory.com/1182

 

https://webnautes.tistory.com/1227?category=754886

 

https://excelsior-cjh.tistory.com/151?category=940399