Skip to content

[Tensorflow] 시작하기

garynoh edited this page Aug 20, 2017 · 1 revision

텐서플로우의 메커니즘

  1. tensorflow operation (op) 를 만든다
  2. data (tensor) 와 op 를 주고 sess.run(op, feed_data) 를 한다
  3. output 을 확인하거나, 수정한다

placeholder 란

placeholder 는 값을 저장하기 위한 텐서플로우의 변수 느낌 위의 메커니즘에서 feed_data 역할을하는 것이 feed_dict 임

ex) sess.run(op, feed_dict={values as dictionary type})

Tensor 란

tensor 는 데이터를 의미한다 tensor 에는 rank 가 있다 shape 는 데이터의 갯수를 의미한다 rank 0 : 값 1개 = scalar 라고도 부르고 shape [] rank 1 : 1차원 어레이 [1,2,3] = vector 라고도 부르고 shape[3] rank 2 : 2차원 어레이 [ [1,2,3], [4,5,6] ] = matrix 라고 부르고 shape[2, 3]

machine learning 의 종류

  • regression : 넓은 범위
  • binary classification : T / F 와 같이 두 가지로 분류
  • multiple classification : A / B / C / D ... 에서 선택

Linear Regression 구성

  1. Linear Hypothesis : input x 에 대해서 하나의 그래프를 유추하게 된다. 어떤 W, b 값이 가장 근접할까 H(x) = Wx + b
  2. Cost function 유추한 그래프 H(x) 와 실제 데이터 y 에 대한 차이를 보기 위해서 (H(x)-y)^2 를 하게 된다 cost = mean(sumi(square(xi - y))) 이것이 cost 가 된다. 결국 여기서 알아야할 것은 cost 의 값이 가장 작은 min cost 를 알아야한다는 것

Minimum cost 를 구하는 법

Gradient descent algorithm 을 사용한다 <원리> 여러 W 값에 대한 cost(W) 를 구하면 하나의 그래프가 생성이 되는데, 이 때 그래프의 각 지점에서의 기울기를 구해서 최솟값으로 수렴한다 (아주 조금씩 이동해서 최소의 값으로 조금씩 이동)

full code for y = x 에 대한 training

import tensorflow as tf

# X and Y data
# 학습할 x, y 값 입력 
x_train = [1, 2, 3]
y_train = [1, 2, 3]

W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

# Our hypothesis XW+b
# H(x) 를 만든다. 최적의 W 와 b 에 대해서 잘 모르지만, 이런 식을 가진다고 가정한다 
hypothesis = x_train * W + b

# cost/loss function
# cost(W) 를 만든다 : cost(W) 또한 그래프 모양을 가지고 H(x) 가 1차함수였기 때문에 제곱한 값은 2차함수의 모양을 가질 것이라 추측할 수 있다. 
cost = tf.reduce_mean(tf.square(hypothesis - y_train))

# Minimize
# Gradient Descent Optimizer 를 만든다 
# W 값을 바꿔가면서 cost(W) 에서의 기울기를 구하게 되고 기울기가 최소인 지점으로 이동한다 
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)

# Launch the graph in a session.
# 세션을 만든다 
sess = tf.Session()
# Initializes global variables in the graph.
sess.run(tf.global_variables_initializer())

# Fit the line
# 0 부터 2000 까지 20의 배수에서 train 이라는 노드를 실행시킨다
for step in range(2001):
   sess.run(train)
   if step % 20 == 0:
       print(step, sess.run(cost), sess.run(W), sess.run(b))
출처 : Sung kim Youtube lecture : https://www.youtube.com/watch?v=fZUV3xjoZSM&index=8&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm#t=469.979772426
Clone this wiki locally