일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 김건우
- 백트래킹
- samsung research
- 프로세스
- 완전탐색
- Brute Force
- 시뮬레이션
- paging
- 동기화문제
- 가상메모리
- segmentation
- pwnable.kr
- Deadlock
- Memory Management
- higunnew
- 삼성기출
- fork
- 운영체제
- 삼성리서치
- 컴공복전
- 백준
- 스케줄링
- exec
- BFS
- 구현
- ascii_easy
- 알고리즘
- dfs
- BOJ
- 데드락
- Today
- Total
gunnew의 잡설
1. Why Tensor Flow? 본문
(1) 내가 텐서 플로우를 선택한 이유
텐서플로우(TensorFlow)는 딥러닝을 쉽게 구현할 수 있게 만든 오픈소스 모듈(라이브러리)이다. 머신러닝 공부의 필요성을 느낀 후 내가 처음으로 배워야겠다고 마음먹은 것이 바로 텐서 플로우이다. 그 이유는 딥러닝 프레임워크 중 단연 1등을 차지하고 있었기 때문이다. 물론 딥러닝의 세계는 몇 년 만에 그 트렌드가 너무나도 빨리 변하기는 하나, 현시점에서 가장 배우기 쉬운 것이 텐서 플로우라고 생각했다. 규모의 경제가 작용하기 정말 쉬운 분야이기 때문이다.
게다가 나는 학교에서 딥러닝은커녕 파이썬도 배우지 않았다. 아무래도 Computer Engineering의 아주 Low-Level을 사랑하는 학교이다보니 지금까지 나는 C, C++, 어셈블리, 컴퓨터 구조 등의 과목을 위주로 공부해왔었다. 그러나, 내가 그 분야의 정점에 도달한 것은 아니지만 감히 판단해보기를 세상을 바꾸는 하나의 커다란 축은 High-Level에 있는 세계 생각했다. 즉, 이 시대에 내가 머신러닝을 공부하지 않는다면 도태될 것이다. 그래서 내가 처음 알고리즘 공부를 시작했을 때, P.S Language로 유명한 C++을 선택했던 것과 마찬가지로, 머신러닝을 공부하기로 마음먹었을 때 이 분야 1등인 텐서 플로우를 공부하기로 마음먹었다.
무엇보다 가장 중요한 계기는 내가 머신러닝 공부를 시작하며 처음 접한 컨텐츠가 sung kim교수님의 유튜브 강의였기 때문이다. 따라서 이 카테고리는 sung kim교수님의 강의를 활용하여 작성될 것이다.
(2) 텐서 플로우의 개념
당장에 이 글을 쓰는 가장 큰 이유는 나에게 설명하기 위해서이다. 따라서 어느 정도 프로그래밍 기초가 있다고 가정하고 서술할 것이다.
텐서 플로우는 데이터 플로우 그래프(Data Flow Graph)를 이용하여 수치화된 계산에 최적화한 오픈소스 라이브러리이다. 컴퓨터 공부를 하면서 항상 느끼는 것이지만, 말이 참 어렵다. 처음 텐서 플로우든, 머신러닝이든 공부하려고 시작하는 사람이 과연 저 문장을 보고 어떤 생각이 들까. 참으로 막막할 것이다. 물론 나도 컴퓨터 공학에 처음 발을 들였을 때도 그러했다. 철수의 집이 어디냐고 물으면 영희의 집 옆이라고 답하고, 그럼 영희네 집이 어디냐고 물어보면 민수네 집 앞이라고 답해주는 기분이다.
각설하고, 데이터 플로우 그래프는 무엇인가? 일단, 그래프(Graph)는 노드(Node)와 노드를 연결하는 간선(Edge)으로 이루어져 있다. 아니 그럼 Node랑 Edge는 뭐야. 노드는 정보를 담고 있는 그릇이고, 간선은 그 노드 간의 흐름을 나타낸다고 생각하면 된다. 텐서 플로우에서 노드들은 어떤 operation(연산)을 뜻하며, 간선들은 데이터의 흐름을 뜻한다. 이것을 Tensor라고 한다. 즉, '텐서 플로우'라는 의미는 노드에 저장된 연산을 데이터들이 흐르며(flow) 무언가를 계산하는 것이라고 쉽게 생각해 볼 수 있다.
당연하게도 무슨 말인지 감이 안 온다. 마치 15학년도 수능 신채호 지문 我와 非我의 투쟁과 같은 느낌일 것이다. 그렇다면 텐서 플로우를 설치하고 파이썬으로 코딩하며 이들을 feel 해보자.
(3) 텐서플로우 설치
나는 Anaconda3가 설치되어 있기 때문에 anaconda prompt (혹은 Powershell이나 cmd도 가능. 파이썬이 깔려있는 위치로 알아서 이동하시오)에 위와같은 명령어를 쳐보자. 그럼 무언가 컴퓨터 고수가 된 느낌을 받으며, 모듈하나 설치하는 데 무슨 이렇게 오래 걸려 라는 생각이 들 것이다. 혹시 Pycharm을 쓰는 사람이라면 꼼수를 써서 그냥 editor에다가 밑의 코드를 쳐보자.
import tensorflow as tf
그럼 Pycharm이 tensorflow가 없는데요? 하면서 install 할 수 있는 문구를 띄워줄 것이다. 거기서 install만 눌러주면 몇 분 안에 설치가 완료된다.
(4) Do coding
컴퓨터 이론들은 백날 이론으로 설명을 들어도, 그것을 구현하기 위해 컴퓨터 앞에 앉으면 천재가 아닌 이상 눈앞이 캄캄해진다. 그래서 나는 알고리즘과 자료구조를 Pseudo-code로 배우는 것을 싫어한다. 그거 가지고 코딩을 어떻게 하냐.
그러니까 파이썬으로 코딩을 해보며 Write and feel을 하자 (우리 학교 교수님이 직접 하신 말씀이다). 가장 간단한 형태로 3+4와 같은 연산을 하고 싶다고 해보자. 그럼 a = 3, b = 4 하고 print(a+b)치면 된다. 이것이 머신러닝의 끝이다. 그러나 텐서 플로우에서는 위에서 언급했듯 노드에 Operation을 집어넣고 그 사이를 Tensor들이 흐르게 하는 것이 핵심이다.
import tensorflow as tf
# 상수형의 operation을 생성
# 노드에 갖다 붙이기
hello = tf.constant("Hello, TensorFlow")
# 세션을 만들고
sess = tf.Session()
# 이 세션으로 실행하여 결과를 출력
print(sess.run(hello))
b'Hello, TensorFlow'
먼저 tensorflow 를 tf로 쓰겠다고 한다. 그리고 hello라는 노드에 "Hello, TensorFlow"라는 글자를 상수형 operator(이것도 연산이라 생각)로 담는다. 그리고 이걸 그냥 출력하면 해당 노드가 텐서 플로우에 어떻게 저장되어 있는지가 나올 것이다 (Java에서 toString()를 오버 라이딩하지 않으면 클래스 객체 정보만 나오는 것과 동일). 이것은 우리의 관심 대상이 아니다. 그 이유는 위에서도 말했듯이 현재 노드는 단순히 '연산'에 불과하기 때문이다. 연산이 의미를 갖기 위해선 이를 실행해야 할 것이다.
텐서 플로우에서, 이 '실행'부분을 담당하는 것이 'Session'(이하 세션)이다. 세션이라는 것을 따로 만들어서 이것을 가지고 실행해야 한다. sess = tf.Session()으로 세션을 생성한 후 print(sess.run(hello))로 hello라는 노드로 하는 그래프를 실행한다는 뜻이다. Session에 대한 이해는 나도 잘 모르겠으니 일단 넘어가겠다. 일단 문법으로 이해하고 넘어가야지. 아니, 근데 왜 앞에 b가 나와요?? 이건 그냥 텐서 플로우가 문자열 처리를 할 때 byte로 해서 그렇다. 신경 안 써도 된다.
조금 더 고-오-급으로 넘어가보자. 나는 3 + 4가 뭔지 모르겠다. 이것을 알아내기 위해 파이썬을 다운받고 텐서플로우까지 다운받아서 연산을 해보려고 한다. 그럼 다음과 같은 코드가 필요하다. |
# node1, 2에 상수형 operation으로 3.0과 4.0 할당
# node3에 위에 노드 두 개를 더하는 operation을 할당
node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0, tf.float32)
node3 = tf.add(node1, node2)
sess = tf.Session()
print("sess.run(node1, node2): ", sess.run([node1, node2]))
print("sess.run(node3): ", sess.run(node3))
node1과 node2에는 상수형 operation인 3.0과 4.0을 할당하고 node3에는 두 노드를 더하는 operation을 추가한다. 더하는 연산은 tf에 있는 add함수를 이용하자. 그리고 나서 나머지는 똑같다. session을 만들고 이것을 가지고 실행시켜서 출력해주자. |
(5) 정리
sess.run(node1, node2): [3.0, 4.0]
sess.run(node3): 7.0
정리해보자. 텐서 플로우는 다음과 같은 과정을 통해 연산한다. 다만 2번에 feed data나 3번에 update variable에 대한 것은 머신러닝의 개념이 추가된 것인데 이는 다음 장 즈음에 설명할 수 있을 것이다.
-
Session을 만들고 이를 통해 연산을 실행한다.
-
결과를 확인하며 이를 업데이트한다.
한 줄 요약
노드 만들고 노드에 연산자 넣어놓고 나만의 그래프가 완성되면 그것을 세션으로 실행. |
끝
'TensorFlow' 카테고리의 다른 글
3. Multi-variable linear regression (0) | 2019.11.10 |
---|---|
2. Linear Regression Using Tensor Flow (0) | 2019.11.10 |