Tensorflow는 현존하는 머신러닝 프레임워크 중 가장 유명한 프레임 워크이다.
필자가 딥러닝을 배우기시작하면서 선택한 프레임워크인데 생각보다 어렵지는 않다.
그러나 필자가 블로그에 포스팅 하는 부분들 중에서는 거의 해본적없는 분야이고
빨리 빨리 바뀌기에 이 포스터는 항상 맞을수 없다고 볼 수 있다.
그러기 때문에 읽는 입장에서 그 부분을 고려해서 읽길 바란다.
이 포스터는 Python3.6으로 Tensorflow1.2로 테스팅 했으며 작업환경은 PyCharm이며 특별한 경우가 아니면 쉘에서 실행하지 않음.
Tensorflow 예제
import tensorflow as tf
a = tf.constant(5,name='input_a')
b = tf.constant(7,name='input_b')
c = tf.multiply(a,b,name='mul_c')
d = tf.add(a,b,name='add_d')
e = tf.add(c,d,name='add_e')
sess = tf.Session()
print(sess.run(e))
위의 코드는 정말 간단한 예제이다.
사실 영어만 읽을줄 안다면 위의 예제는 이해하는데 아예 무리가 없다.
또한 실행결과 역시 예측할 수 있다.
모두가 예측했겠지만 결과는 47이 나온다.
혹시라도 과정을 모르겠다면 과정에 대해서 설명을 해주겠다... 의미있는지는 모르겠다.
multily는 곱셈이다. 따라서 5*7=35이다.
add는 덧셈이다. 따라서 5+7=12이다.
35+12를 하면 47이다.
이 과정은 총 3가지의 과정으로 나눠져 있이며 각각의 섹션으로 간단히 설명하겠다.
상수의 선언
상수의 선언 메소드는 아래와 같다.
def constant(value, dtype=None, shape=None, name="Const", verify_shape=False)
값은 반드시 적어야 하며 나머지는 디폴트 매개변수 처리가 되어있다.
이 메소드의 효력은 심플하게도 상수 하나를 선언하는 것이다.
위의 예제에서는 상수 5와 7을 선언하는 예제인 것이다.
명령(Op)의 선언
말그대로 연산할 명령의 선언이다. 그러나 이 명령이 바로 실행되는 것이 아니라 일종의 연결상태가 된다.
위의 예제에서 명령은 총 두개가 사용되었다
def multiply(x, y, name=None)
def add(x, y, name=None)
뭐 연산자는 이것만 있는게 아니라 더 많다. 정말 당연한 이야기지만...
교재에서 multiply가 아니라 mul이라고 되어있는 경우가 있는데 mul이라는 메소드는 현버전에 없다.
이유는 모르겠다. 그런데 나눗셈은 div라는 이름으로 남아있고 뺄셈은 subtract로 남아있다. 좀 일관성이 없는 것 같다.
세션으로 결과보기
난 세션이라는것을 뭐라고 설명할지 조금 애매하다.
솔직히 뭐를 정확히 세션이라하는지는 아직도 잘 모른다. 웹에서도 왜 세션이라 부르는지 모르겠다.
세션의 뜻은 접속인데 설명을 뭐라고 해야할지 모르겠다.
여기서의 세션은 이때까지 만든 노드(텐서)들의 총 집합이라고 생각하면된다.
위에도 말했지만 위의 명령들을 선언했다고 아직 실행된건 아니고 연결되있는 상태이며 이를 세션을 만든 후 실행해야 결과를 볼 수 있다.
확실한건 결과를 보기위해서는 세션이 필요하다는 것이다.
세션을 만드는 메소드는 아래와 같다.
이제 세션을 실행하면 원하는 노드 지점을 선택해서 run을 하면된다.
쉘에서는 그냥 run만해도 값을 볼 수 있짐나 우리는 IDE에서 소스코드를 작성하고 있으므로 결과를 보려면 print함수를 사용해야한다.
print(sess.run(e))
위 코드의 결과로 값은 세션은 실행된다.
세션의 실행으로 위의 상수의 선언부터 각각의 명령어 까지 순차적으로 꼬리에 꼬리를 물고 실행하게 되며 최종적으로
우리가 실행시킨 e노드까지의 값을 볼 수 있다.
정말 실행결과가 우리가 의도한대로 나오는지는 아래를 확인해보자
이제 간단한 텐서플로우 예제를 만들어 보았다.
도중 도중 복잡한 알고리즘 들이 나오긴하지만 어려운건 없다.
이제 차근차근 알아나가보자
'Programming > Python-Tensorflow' 카테고리의 다른 글
[Tensorflow-06] 변수 (0) | 2017.08.04 |
---|---|
[Tensorflow-05] Fetches, Feed Dictionary, Place Holder (0) | 2017.08.02 |
[Tensorflow-04] 그래프 (0) | 2017.08.02 |
[Tensorflow-03] 텐서 (0) | 2017.08.02 |
[Tensorflow-02] 텐서보드에서 그래프 보기 (0) | 2017.08.01 |