-
Notifications
You must be signed in to change notification settings - Fork 0
[Tensorflow] 시작하기
garynoh edited this page Aug 20, 2017
·
1 revision
- tensorflow operation (op) 를 만든다
- data (tensor) 와 op 를 주고 sess.run(op, feed_data) 를 한다
- output 을 확인하거나, 수정한다
placeholder 는 값을 저장하기 위한 텐서플로우의 변수 느낌 위의 메커니즘에서 feed_data 역할을하는 것이 feed_dict 임
ex) sess.run(op, feed_dict={values as dictionary type})
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]
- regression : 넓은 범위
- binary classification : T / F 와 같이 두 가지로 분류
- multiple classification : A / B / C / D ... 에서 선택
- Linear Hypothesis : input x 에 대해서 하나의 그래프를 유추하게 된다. 어떤 W, b 값이 가장 근접할까 H(x) = Wx + b
- Cost function 유추한 그래프 H(x) 와 실제 데이터 y 에 대한 차이를 보기 위해서 (H(x)-y)^2 를 하게 된다 cost = mean(sumi(square(xi - y))) 이것이 cost 가 된다. 결국 여기서 알아야할 것은 cost 의 값이 가장 작은 min cost 를 알아야한다는 것
Gradient descent algorithm 을 사용한다 <원리> 여러 W 값에 대한 cost(W) 를 구하면 하나의 그래프가 생성이 되는데, 이 때 그래프의 각 지점에서의 기울기를 구해서 최솟값으로 수렴한다 (아주 조금씩 이동해서 최소의 값으로 조금씩 이동)
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))