Deep Learning/Keras & Tensorflow

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

ballentain 2021. 8. 31. 16:03

 

 

 

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