SlideShare a Scribd company logo
TENSORFLOW
101
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
발표자
> Leonardo YongUk Kim (dalinaum@gmail.com)
> 모바일 데이터베이스, Realm의 Java 개발자.
> GDG Korea Android의 운영자
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
다루는 것과 다루지 않는 것
> 다루는 것
> 다루지 않는 것
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
다루는 것
> 텐서플로우가 무엇인가?
> 어떻게 설치하는가?
> 간략한 사용법
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
다루지 않는 것
> 복잡한 사용법
> 머신 러닝, 인공 지능
> 알파고, 이세돌
> 구글의 전략
> 창조 경제
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
텐스플로우란 무엇인가?
> TensorFlow is an Open Source Software Library for
Machine Intelligence
> Tensor - 벡터, 매트릭스 등의 자료구조를 의미
> Flow - 일련의 처리
> TensorFlow - 여러 자료구조를 일련의 가공을 거쳐
머신 지능을 만들게 하는 라이브러리.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
다운로드와 설치
> 이 발표는 OS X, CPU 만 다룹니다.
> export TF_BINARY_URL=/proxy/https://
storage.googleapis.com/tensorflow/mac/
tensorflow-0.9.0rc0-py2-none-any.whl
> pip install --upgrade $TF_BINARY_URL
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
HELLO WORLD
# python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
> 상수를 만들 수 있고 실행은 세션에서 해야 합니다.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
HELLO WORLD (계속)
# python
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
a = tf.constant(10)
b = tf.constant(32)
print(sess.run(a + b))
> 왜 덧셈도 했나요?
> 죄송합니다.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
> MNIST database (Mixed National Institute of Standards
and Technology database) is a large database of
handwritten digits that is commonly used for training
various image processing systems.
> 5.5 만개의 학습이미지, 1 만개의 테스트 이미지, 0.5
만개의 검증 이미지
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
MNIST 다운로드
# MNIST 데이터 다운로드
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
> 손으로 받을 필요 없어요.
> 5.5 만개의 학습이미지 (mnist.train)
> 1 만개의 테스트 이미지 (mnist.test)
> 0.5 만개의 검증 이미지 (mnist.validation)
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
> 개별이미지는 28 x 28의 크기
> 숫자들의 배열로 치환하자
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
이미지 텐서
> 평면화 시키면 28 x 28 = 784.
> 784 차원의 벡터 공간
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
> mnist.train,images는 [55000, 784] 모양의 텐서.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
원 핫 벡터
> n번째 차원만 1이고 나머지는 모두 0인 벡터.
> 3은 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]으로 표현.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
> 우리는 0부터 9까지 숫자로 매핑할 것이기 때문에
[55000, 10]의 mnist.train.labels을 준비.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
소프트맥스 회귀
> 사람은 직관적으로 0에서 9까지 판독 한다.
> 반면 여기에서는 각 숫자에 대한 확률을 얻게 된다.
소프트맥스 회귀는 두 단계다.
1. 입력이 특정 클래스에 속한다는 근거를 추가한다.
2. 근거를 확률로 환산한다.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
가중치
파란색이 긍정적인 가중치
빨간색이 부정적인 가중치
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
근거와 소프트맥스
> y = softmax(evidence)
> softmax(x) = normalize(exp(x))
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
소프트맥스
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
소프트맥스
y = softmax(Wx + b)
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
회귀 시행
> 텐서플로우를 가져오자.
import tensorflow as tf
> 어떤 숫자의 이미지도 받기 위한 플레이스 홀더.
x = tf.placeholder(tf.float32, [None, 784])
> None은 어떤 차원도 될 수 있다는 의미
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
W = tf.Variable(tf.zeros([784, 10]))
b = tf.Variable(tf.zeros([10]))
> W와 b를 모두 0으로 초기화.
> 배운 이후로 의미 없는 수.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
모델을 수행시키자.
y = tf.nn.softmax (tf.matmul(x, W) + b)
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
훈련
> 잘못을 알기 위해 좋은 모델이 무엇인지 필요.
> cross-entrophy을 비용함수로 사용.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
옳은 값을 넣을 플레이스 홀더가 필요.
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
최적화 알고리즘을 선택 (경사 하강법 선택)
cross_entropy가 최소화되도록 조금씩 값을 바꾸어
가며 값을 찾음.
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
초기화
init = tf.initialize_all_variables()
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
세션에 모델을 넣고 변수를 초기화
sess = tf.Session()
sess.run(init)
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
1000번을 훈련
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
모델 평가
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
tf.argmax은 가장 높은 확률의 인덱스를 가져옴.
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
정확도를 비교
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
전체 코드
https://gist.github.com/dalinaum/
64cca32623313ae56638cbedbd8e837a
조금 더 알고 싶습니다
> 텐서플로우 튜토리얼을 봅시다.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
두가지 더: 구글의 머신러닝 API
> Vision API demo
> Speech API demo
감사합니다.
© Leonardo YongUk Kim (dalinaum@gmail.com), 2016.

More Related Content

Tensorflow 101

  • 1. TENSORFLOW 101 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 2. 발표자 > Leonardo YongUk Kim (dalinaum@gmail.com) > 모바일 데이터베이스, Realm의 Java 개발자. > GDG Korea Android의 운영자 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 3. 다루는 것과 다루지 않는 것 > 다루는 것 > 다루지 않는 것 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 4. 다루는 것 > 텐서플로우가 무엇인가? > 어떻게 설치하는가? > 간략한 사용법 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 5. 다루지 않는 것 > 복잡한 사용법 > 머신 러닝, 인공 지능 > 알파고, 이세돌 > 구글의 전략 > 창조 경제 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 6. 텐스플로우란 무엇인가? > TensorFlow is an Open Source Software Library for Machine Intelligence > Tensor - 벡터, 매트릭스 등의 자료구조를 의미 > Flow - 일련의 처리 > TensorFlow - 여러 자료구조를 일련의 가공을 거쳐 머신 지능을 만들게 하는 라이브러리. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 7. 다운로드와 설치 > 이 발표는 OS X, CPU 만 다룹니다. > export TF_BINARY_URL=/proxy/https:// storage.googleapis.com/tensorflow/mac/ tensorflow-0.9.0rc0-py2-none-any.whl > pip install --upgrade $TF_BINARY_URL © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 8. HELLO WORLD # python import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() a = tf.constant(10) b = tf.constant(32) print(sess.run(a + b)) > 상수를 만들 수 있고 실행은 세션에서 해야 합니다. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 9. HELLO WORLD (계속) # python import tensorflow as tf hello = tf.constant('Hello, TensorFlow!') sess = tf.Session() a = tf.constant(10) b = tf.constant(32) print(sess.run(a + b)) > 왜 덧셈도 했나요? > 죄송합니다. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 10. > MNIST database (Mixed National Institute of Standards and Technology database) is a large database of handwritten digits that is commonly used for training various image processing systems. > 5.5 만개의 학습이미지, 1 만개의 테스트 이미지, 0.5 만개의 검증 이미지 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 11. MNIST 다운로드 # MNIST 데이터 다운로드 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) > 손으로 받을 필요 없어요. > 5.5 만개의 학습이미지 (mnist.train) > 1 만개의 테스트 이미지 (mnist.test) > 0.5 만개의 검증 이미지 (mnist.validation) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 12. > 개별이미지는 28 x 28의 크기 > 숫자들의 배열로 치환하자 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 13. 이미지 텐서 > 평면화 시키면 28 x 28 = 784. > 784 차원의 벡터 공간 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 14. > mnist.train,images는 [55000, 784] 모양의 텐서. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 15. 원 핫 벡터 > n번째 차원만 1이고 나머지는 모두 0인 벡터. > 3은 [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]으로 표현. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 16. > 우리는 0부터 9까지 숫자로 매핑할 것이기 때문에 [55000, 10]의 mnist.train.labels을 준비. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 17. 소프트맥스 회귀 > 사람은 직관적으로 0에서 9까지 판독 한다. > 반면 여기에서는 각 숫자에 대한 확률을 얻게 된다. 소프트맥스 회귀는 두 단계다. 1. 입력이 특정 클래스에 속한다는 근거를 추가한다. 2. 근거를 확률로 환산한다. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 18. 가중치 파란색이 긍정적인 가중치 빨간색이 부정적인 가중치 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 19. 근거와 소프트맥스 > y = softmax(evidence) > softmax(x) = normalize(exp(x)) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 20. 소프트맥스 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 21. 소프트맥스 y = softmax(Wx + b) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 22. 회귀 시행 > 텐서플로우를 가져오자. import tensorflow as tf > 어떤 숫자의 이미지도 받기 위한 플레이스 홀더. x = tf.placeholder(tf.float32, [None, 784]) > None은 어떤 차원도 될 수 있다는 의미 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 23. W = tf.Variable(tf.zeros([784, 10])) b = tf.Variable(tf.zeros([10])) > W와 b를 모두 0으로 초기화. > 배운 이후로 의미 없는 수. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 24. 모델을 수행시키자. y = tf.nn.softmax (tf.matmul(x, W) + b) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 25. 훈련 > 잘못을 알기 위해 좋은 모델이 무엇인지 필요. > cross-entrophy을 비용함수로 사용. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 26. 옳은 값을 넣을 플레이스 홀더가 필요. y_ = tf.placeholder(tf.float32, [None, 10]) cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 27. 최적화 알고리즘을 선택 (경사 하강법 선택) cross_entropy가 최소화되도록 조금씩 값을 바꾸어 가며 값을 찾음. train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 28. 초기화 init = tf.initialize_all_variables() © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 29. 세션에 모델을 넣고 변수를 초기화 sess = tf.Session() sess.run(init) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 30. 1000번을 훈련 for i in range(1000): batch_xs, batch_ys = mnist.train.next_batch(100) sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 31. 모델 평가 correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1)) tf.argmax은 가장 높은 확률의 인덱스를 가져옴. accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) 정확도를 비교 © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 32. 전체 코드 https://gist.github.com/dalinaum/ 64cca32623313ae56638cbedbd8e837a 조금 더 알고 싶습니다 > 텐서플로우 튜토리얼을 봅시다. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.
  • 33. 두가지 더: 구글의 머신러닝 API > Vision API demo > Speech API demo 감사합니다. © Leonardo YongUk Kim (dalinaum@gmail.com), 2016.