rueki

2. 선형회귀 구현 본문

Tensorflow

2. 선형회귀 구현

륵기 2019. 7. 16. 11:07
728x90
반응형

이 글을 기본적인 선형회귀에 대한 지식이 있다고 가정하고, 텐서플로우로 구현해보는 시간을 가지도록 하겠다.

 

선형회귀에서도 가설 H = W * X + b를 적용하도록 하겠다.

#텐서플로우 라이브러리 불러오기
import tensorflow as tf 

# 입력 X와 출력 Y에 대해 변수로 선언
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y)
# 선형회귀 모델에 적용시킬 X,Y의 값
x_data = [1.,2.,3.]
y_data = [1.,2.,3.]

# random_uniform - 정규분포 난수를 생성
W = tf.Variable(tf.random_uniform([1],-1.0, 1.0)) # -1과 1사이의 난수 1개를 생성
b = tf.Variable(tf.random_uniform([1],-1.0, 1.0))

hypothesis = W*X + b #가설

입출력 데이터도 만들었고 가설도 세웠으니 이제 비용함수를 구현해보자.

비용함수의 cost를 최소로 만드는 것이 좋은 모델이라고 가정을 하는데,

이를 위해서 사용하는 방법이 평균 오차 제곱이다.

cost = tf.reduce_mean(tf.square(hypothesis - Y))
#비용함수를 최적화하기 위해서, 기울기 하강이라는 method를 사용
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1)
train_op = optimizer.minimize(cost) #비용을 최소화

GradientDescent, 기울기 하강에 대해 간략하게 알아보자

하나의 그래프를 미분하면 그에 대한 기울기 값이 나온다. 

여기서 기울기는 learning rate에 영향을 받는다는 것은 꼭 명심해야한다.

한 줄로 설명하자면은, 기울기 하강을 통해 Cost function을 최소화하는 값을 찾기위해서,

learnging rate를 계속 바꿔가며, 계속해서 기울기를 최소 비용을 향해 맞추는 것이다.

train_op에 대해 보면, 비용함수에 대해 GradientDescent로 최적화를 하고, 비용을 최소화 시키는 것을 알 수가 있다.

 

이제 모델의 구현과 훈련은 다 했으니, 실제로 입력값을 넣어보고 값에 실제로 값이 어떻게 나오는지 알아보자

with tf.Session() as sess:
	sess.run(tf.global_variables_initializer()) #session 초기화
    
    for step in range(100):
    	_, cost_val = sess.run([train_op,cost], feed_dict = {X : x_data, Y: y_data})
        print(step, cost_val, sess.run(W), sess.run(b))
    
    print('X : 5, Y:', sess.run(hypothesis, feed_dict={X:5}))
    print('X : 2.5, Y:', sess.run(hypothesis, feed_dict={X:2.5}))
    

x_data와 y_data로 모델을 훈련하고, 실제로 X값을 5와 2.5를 적용시켰을 때 Y값을 출력해보았다.

0 4.0702357 [0.9530696] [0.33881092]
1 0.061468918 [0.8613469] [0.28982088]
2 0.01297307 [0.8748281] [0.28731796]
3 0.011812427 [0.876728] [0.2799231]
4 0.011244823 [0.8798126] [0.2732473]
.
.
.
.
97 0.00012171918 [0.98749423] [0.02842847]
98 0.000115937575 [0.9877949] [0.02774508]
99 0.000110431894 [0.9880883] [0.02707812]
X : 5, Y: [4.9675198]
X : 2.5, Y: [2.497299]

마지막 두 줄의 출력값을 봤을 때, Y값이 모두 입력한 X값에 대해 근사치가 나왔다.

 

여기서 가장 중요한 점은 비용을 최소로 만드는 기울기(W)와 y 절편( b)를 구하는 것이라는 것을 꼭 기억하자.


728x90
반응형

'Tensorflow' 카테고리의 다른 글

TensorFlow 01. 사용법 알아보기  (0) 2019.12.03
5. Mnist 예제  (0) 2019.07.18
4.신경망 구현 - Hidden layer 추가  (5) 2019.07.17
3. 신경망 구현  (0) 2019.07.16
1. 텐서플로우의 기초 및 변수  (0) 2019.07.16
Comments