import tensorflow as tf
x_data = [1.,2.,3.,4.]
y_data = [1.,3.,5.,7.]
x와 y 데이터를 좌표에 찍어서 보면 데이터가 선형(linear)을 이루는것을 알 수 가 있습니다.
이제 이 데이터 셋에 가장 적합한 선을 찾을 수 있도록 해보겠습니다.
H(x) = w*x라는 임의의 가설(Hypothesis)을 세우도록 하겠습니다.
Python과 TensorFlow를 이용하여 아래처럼 작성해보겠습니다.
W = tf.Variable(tf.random_uniform([1],-1.0,1.0))
b = tf.Variable(tf.random_uniform([1],-1.0,1.0))
X = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
hypothesis = W*X+b
cost = tf.reduce_mean(tf.square(hypothesis-Y))
머신러닝, 딥러닝이라는 학문에서 러닝(Learning)이란 부분이 여기서 적용이 됩니다.
임의의 가설에서 학습을 통해 데이터 셋에 맞는 최적의 가설을 찾아내는 것이죠.
여기서 저희는 Cost함수를 사용하게 됩니다.
이전에 사용했던 이미지 인데요, 학습전에는 H(x) = W*x+b에서 임의의 값을 입력하게되어 시작하게 됩니다.
예를 들면 H(x) = 3*x +1 인거죠, 하지만 여기서 저희 데이터셋은 파란색 선이라면 H(x) = 1*x에 가까워 져야 데이터셋에 최적화된 선형회귀 모델이 됩니다.
Cost함수의 경우 실제 데이터와 예측하는 데이터의 차이 값을 나타냅니다.
예측값이 실제값과 차이가 없다면 실제값과 값다는 의미가 되며, Cost함수가 0에 가까울수록 예측률이 높다고 생각하시면 됩니다.
보통 학습을 진행할 수록 이 Cost값은 낮아지게 됩니다.
TensorFlow의 경우 여러가지 Cost함수를 제공합니다. 먼저 GradientDescentOptimizer 함수를 사용하여 학습을 진행해보도록 하곘습니다. 총 2000번의 학습을 통해 어떤 W,b값이 나오는지 확인해보록 하겠습니다.
rate = tf.Variable(0.1)
optimizer = tf.train.GradientDescentOptimizer(rate)
train = optimizer.minimize(cost)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
for step in range(2001):
#sess.run(train)
sess.run(train,feed_dict={X:x_data, Y:y_data})
if step %20 ==0:
print(step+sess.run(cost,feed_dict={X:x_data,Y:y_data}),sess.run(W),sess.run(b))
print(sess.run(hypothesis, feed_dict = {X:[10,20,55]}))