인공지능 및 데이터과학/딥러닝 프레임워크

텐서플로우(Tensorflow) - 그래프 생성 및 실행

Steve Jang 2018. 3. 19. 11:44

텐서플로우라는 놈은 파이썬에 낑겨서 구동되는 라이브러리라는 것을 바로 전 포스팅에서 설명하였다. 그러면 이 라이브러리가 어떤식으로 돌아가고, 텐서플로우가 파이썬과 어느 차이가 있는지 간단하게 설명해보는 자리를 가지도록 해보자.


텐서플로우는 우선 기본적으로 그래프라는 것을 기반으로 작동을 하게 된다. 이해가 잘 되지 않을것이다. 쌩뚱맞게 그래프라니, 일반 사람들은 그래프라고 하면 수치를 바 형태로 표현하는 것을 이해할 수 있지만 여기서 말하는 그래프는 쉽게 생각해서 신경망 모양을 이해하면 될 것이다.



텐서플로우라는 뜻은 직역하면 텐서의 흐름(Tensor - flow), 즉 데이터의 흐름(Data-flow)과 동일하다. 즉 텐서플로우는 데이터의 흐름을 위해서 만들어진 라이브러리라고 생각하면 된다. 우리 뇌에는 수많은 뉴런들이 있고 데이터를 이 뉴런들을 통해서 전달하게 되는데 이 뉴런들을 그래프라고 인식하면 되고 뉴런들안에 있는 데이터가 텐서라고 생각하면 된다


텐서플로우 프로그램을 시각화 한 것이 위의 모양이라고 생각하면 된다. 우선 X와 Y의 값을 생성하고, 이 텐서들을 add라는 명령어로 값을 합친 후, sess.run이라는 텐서의 실행으로 값을 실행하면 15라는 값이 나오게 된다.


기존의 프로그램과 차이점이 이해가 안될 수 있지만, sess.run이라는 것을 수행하기 전에는 위의 내용은 실행이 되지 않는다. 즉, 미리 세팅해놓고 sess.run을 통해서 실제 프로그램을 작동하는 것이 텐서플로우 방식이다.



바로 전의 텐서플로우 예제에서는 프로그램이 제대로 실행되지 않았었다. 우리가 원했던 값이 나오지 않고, 텐서의 상태값만 나오게 됐는데 이번에는 연산까지 수행되는 것을 실행해 보도록 하자. 위에 있는 텐서플로우 그래프를 코드로 옮겨보자


1
2
3
4
5
6
7
8
9
10
import tensorflow as tf
 
= tf.constant(10)
= tf.constant(5)
= tf.add(x,y)
 
sess = tf.Session()
print(sess.run(c))
sess.close()
 
cs


위와 같이 소스를 짠 후, run을 수행하면 제대로 값이 나오는 것을 볼 수 있다


1
2
3
4
5
6
7
8
9
10
2018-03-19 11:40:07.020000: I C:\tf_jenkins\home\workspace\rel-win\M\windows\PY\35\tensorflow\core\platform\cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
 
 
Ran 0 tests in 0.000s
 
OK
15
 
Process finished with exit code 0
Empty test suite.
cs


추가가 된 것은 session 이라는 것을 실행한다는 것과, 마지막에는 세션을 종료한 부분을 넣었다. 텐서플로우는 이렇게 내용의 와꾸(?)를 짜놓고, 마지막에 스위치 버튼을 눌러서 실행을 하는 구조이고 이것을 지연실행이라고 한다