경사하강법 연습
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()
텐서플로우 객체에서 세션을 얻어온 다음
세션이라는 변수에 넣어 초기화 해줍니다.
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시간 노동에 대한 매출