Tensorflow 기초
- 텐서플로우는 기계학습과 딥러닝을 위해 구글에서 만든 오픈소스 소프트웨어 라이브러리
- matlab의 simulink와 유사하게 building block 회로 설계하는 것과 유사한 visual programming language
- C++와 Python을 지원
- 데이터 플로우 그래프(data flow graph)를 이용해 수치계산(numerical computation)
- 데이터 플로우 그래프란 데이터의 흐름과 연산을 node와 edge로 표현한 방향 그래프(directed graph)
- 데이터는 당연히 다차원 배열이고 텐서(tensor)라고 부르기에 텐서플로우라는 이름이 지어졌다
- 텐서플로우 설치 후 아래 커맨드를 실행하면 다음과 같은 설명을 볼 수 있다
$ pip show tensorflow
Name: tensorflow
Version: 0.11.0
Summary: TensorFlow helps the tensors flow
기본 용어
오퍼레이션 (Operation)
- 그래프 상의 노드는 오퍼레이션으로 불린다
- 오퍼레이션은 하나 이상의 텐서를 입력으로 받아 연산을 수행하고 결과를 반환
텐서 (Tensor)
- 내부적으로 모든 데이터는 텐서를 통해 표현
- 그래프 내의 오퍼레이션 간에는 텐서만이 전달된다 (Caffe의 Blob과 유사)
세션 (Session)
- 그래프를 실행하기 위해서는 세션 객체가 필요
- 세션은 오퍼레이션의 실행 환경을 캡슐화한 것
- 오퍼레이션을 세션 안에 넣어 실행시킨다고 생각하자
변수 (Variables)
- 변수는 그래프의 실행시, 패러미터를 저장하고 갱신하는데 사용
- 메모리 상에서 텐서를 저장하는 버퍼 역할을 한다
(거의) 모든 것은 operation !
다음 예제들을 통해 텐서플로우와 친해져보도록 하자
예제 1
import tensorflow as tf
# hello라는 상수 정의
hello = tf.constant("Hello, World")
# 세션 정의
sess = tf.Session()
# 세션 실행 결과 출력
print sess.run(hello)
예제 2
import tensorflow as tf
# tf 세션 정의
sess = tf.Session()
# 생성자가 리턴하는 값을 출력으로 하는 constant operation a와 b를 정의
# 상수 a, b 정의가 아닌 operation a, b의 정의라고 생각하자
a = tf.constant(2)
b = tf.constant(3)
# c는 operationa와 a와 b를 더하는 operation
# a+b를 계산해 c에 대입하는 것이 아님
c = a + b
# 다음을 실행하면 5가 아닌, "Tensor("add:0", shape=(), dtype=int32)"을 출력
print c
# 세션 실행 결과를 출력
print sess.run(c)
예제 3
import tensorflow as tf
# 변수를 0으로 초기화
state = tf.Variable(0, name="counter")
# state에 1을 더하는 operation 정의
a = tf.constant(1)
new_state = tf.add(state, a)
update = tf.assign(state, new_state)
# 그래프를 생성하기 전에 변수를 초기화해야만 한다 - init_op 정의
init_op = tf.initialize_all_variables()
# 그래프를 띄우고 오퍼레이션들을 실행
with tf.Session() as sess:
# 초기화 오퍼레이션 실행
sess.run(init_op)
# state의 초기 값을 출력
print(sess.run(state))
# session 실행, state 값 출력
for _ in range(3):
sess.run(update)
print(sess.run(state))
# 0, 1, 2, 3 이 출력된다
Sung Hah Hwang, Hosung Nam