STUDY

경사하강법 연습

ai-world.tistory.com 2019. 12. 10. 11:22

import tensorflow as tf 

텐서플로우를 사용하기 위해 tensorflow를 import해줍니다.

 

xData = [1, 2, 3, 4, 5, 6, 7] 
yData = [25000, 55000, 75000, 110000, 128000, 155000, 180000] 

xData = 하루노동시간

yData = 하루 매출

데이터를 넣어줍니다.

 


W = tf.Variable(tf.random_uniform([1], -100, 100)) 
b = tf.Variable(tf.random_uniform([1], -100, 100)) 

W = 가설의 기울기(가중치 weight)

random_uniform = 랜던값을 초기값으로 -100부터 100까지 설정해 줍니다.

b = y 절편(편향, bias)

random_uniform = 가중치와 마찬가지로 초기값을 -100부터 100까지 설정해 줍니다.

 

X = tf.placeholder(tf.float32) 
Y = tf.placeholder(tf.float32) 

X,Y를 placeholder라는 틀에 담아줍니다.

 

H = W*X+b 

H(가설) W * X + b를 정의해 줍니다.

 

cost = tf.reduce_mean(tf.square(H-Y)) 

비용함수 cost변수에 (예측값-실제값)^2의 reduce_mean(평균값)을 정의해줍니다.

 

a = tf.Variable(0.01) 

경사하강 알고리즘에서 얼마만큼 점프를 해줄지 a변수에 0.01만큼 해준다고 설정해 줍니다.

 

optimizer = tf.train.GradientDescentOptimizer(a) 

optimizer는 텐서플로우에서 기본적으로 제공해주는 경사하강 라이브러리입니다.

 

train = optimizer.minimize(cost) 

비용함수를 가장 적게 만드는 방법으로 minimize를 통해 설정해줍니다.

 

init = tf.global_variables_initializer() 

그 다음 global_variables_initializer를 통해 변수를 초기화 해줍니다.

 

sess = tf.Session() 

텐서플로우 객체에서 세션을 얻어온 다음

 

sess.run(init) 

세션이라는 변수에 넣어 초기화 해줍니다.

 

for i in range(5001): 

그다음 드디어 학습을 index 5001(학습은 5000천)만큼 반복하도록 학습합니다.

 

sess.run(train, feed_dict={X: xData, Y:yData}) 

xData와 yData를 매칭해줍니다.

 

if i % 500 == 0: 

500번에 한번씩 학습을 하도록 설정해줍니다.

 

print(i, sess.run(cost, feed_dict={X:xData, Y:yData}), sess.run(W), sess.run(b)) 

현재까지 진행된 학습의 횟수와 변수들을과 가중치(기울기)와 y절편인 b값을 출력해줍니다.

 

print (sess.run(H, feed_dict={X:[8]}))

모든 학습이 끝난 이후에 원하는 결과도 같이 출력해줍니다.

원하는 결과 : 8시간 노동에 대한 매출