Introduction
자~ 설명보다는 한번 보는게 더 좋겠네요.
텐서플로우를 실행해볼까요.
예제 코드부터 간단히 시작해 봅시다. (텐서플로우 설치 후, 주피터 노트북에서 실행하면 편리하게 사용 가능)
무엇을 할 것인가?
첫 번째 예제
가중치 W와 위상차 b를 구하라.
y = W * x + b 라는 상황이 놓여 있다.
입력값 x에 대해서 y를 안다고 가정했을 때, 이를 텐서플로우에 학습시켜 적절한 알고리즘을 이용하여 최적의 W와 b 값을 찾아보자.
소스코드
import tensorflow as tf import numpy as np # Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3 x_data = np.random.rand(100).astype(np.float32) y_data = x_data * 0.1 + 0.3 # Try to find values for W and b that compute y_data = W * x_data + b # (We know that W should be 0.1 and b 0.3, but TensorFlow will # figure that out for us.) W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) y = W * x_data + b # Minimize the mean squared errors. loss = tf.reduce_mean(tf.square(y - y_data)) optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) # Before starting, initialize the variables. We will 'run' this first. init = tf.initialize_all_variables() # Launch the graph. sess = tf.Session() sess.run(init) # Fit the line. for step in range(201): sess.run(train) if step % 20 == 0: print(step, sess.run(W), sess.run(b)) # Learns best fit is W: [0.1], b: [0.3]
소스코드 설명
데이터 플로우 그래프 구축
가상의 소수점 데이터 x_data, y_data를 각각 100개씩 만들어 줍니다.
이 데이터의 관계는 x_data 값에 0.1 값을 곱하고 0.3을 더한 값이 y_data입니다.
여기서 0.1과 0.3을 모른다는 가정하에, 이 값을 찾아가는 과정을 텐서플로우 예제를 통해서 알아가는 겁니다.
텐서플로우를 사용할 것이니 import 하고요.
숫자와 관련된 파이선 함수도 써야 하니 numpy 라이브러리 import 합니다.
x_data, y_data 데이터를 임의로 생성한후, 곱해야하는 값을 W로, 더하는 값을 b로 변수명 설정합니다.
학습을 통해서 W와 b 값은 계속 최적의 값으로 학습이 되어지기 때문에 variable로 선언됩니다.
임의의 값을 W와 b 값으로 만들기 위하여 random_uniform, zeros 함수를 사용하여 값을 생성합니다.
결국 W에 x 값을 곱하고 b를 더한 값이 y가 되는데 이 y의 값이 원래 설정된 y_data 제곱에 최소가 되는 값을 찾도록 loss를 설정하고,
optimizer를 설정하고, 최적화는 loss가 최저가 되는 값이 되도록 경사하강법을 이용하여 학습 합니다...... 뭐 이런 이야기 같습니다. (저도 처음이라서 잘 모르는 상태입니다. → 접한지 3일째 되던 당시)
2. 텐서플로우 가동
아무튼 변수 초기화를 한 다음에 세션 받고, 시작합니다.(법칙임)
트레이닝 할 때는 20단계마다 그 값을 찍으면서 얼마나 값에 수렴해 나가는지 확인할 수 있습니다.
그러면 W는 0.1에 수렴하고, b는 0.3에 수렴해가는 결과를 기대할 수 있습니다.
소스코드 결과
코드 수행은 이미 설치한 jupyter에 예제에 코드 넣고 돌리면 돌아간다.
파일 하나 만들고, 거기서 직접 수행하도록 하면 좋겠지만, 아직은 모르니깐 일단 해 보고 넘어가자.
앞으로 어떻게 접근할까
저처럼 이쪽 잘 모르는 사람도 있을 것이고, 그래도 어느 정도 경험해 봤다는 분도 있을 겁니다.
고전적으로 필기 인식과 관련해서 MNIST 문제가 있는데, 요거 관련해서 선택적으로 알약 복용하시면 됩니다,
※ 이거 클릭한다고 해서 네오처럼 매트릭스 세상으로 보내지는건 아닐겁니다.
그리고 딱히 텐서플로우와 MNIST에 대해서는 이미 튜토리얼 예제로 제공하고 있으니 걱정할 필요 없습니다.