노동 시간 별 매출량을 근거로, 측정값이 없는 영역의 값을 계산토록 한다.
import tensorflow as tf
xData = [1, 2, 3, 4, 5, 6, 7]
yData = [25000, 55000, 75000, 110000, 128000, 155000, 180000]
x축 데이터는 하루 노동 시간. 1부터 7까지.
y축 데이터는 하루 매출량.
W = tf.Variable(tf.random_uniform([1], -100, 100))
b = tf.Variable(tf.random_uniform([1], -100, 100))
가설의 기울기 즉 W(weight)를 하나의 변수로 정의한다. random_uniform을 넣어주는 데 이는 하나의 랜덤값을 만들어주는데 -100부터 100 사이에 있는 값으로 한다.
y절편 b 즉 bias도 동일하게 정의한다.
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
X와 Y를 place holder로서 정의한다. place holder라는 틀.
H = W * X + b
cost = tf.reduce_mean(tf.squre(H - Y))
이제 가설식 1차식을 정의한다.
그리고 비용함수를 정의한다. tf.squre는 제곱 즉, 예측값에서 실제값을 뺀 제곱. reduce_mean은 평균을 구한다는 의미.
a = tf.Variable(0.01)
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)
이제 제일 중요한 '경사 하강 알고리즘에서 얼마만큼 점프할 것인가'를 정의. 여기서는 0.01로.
optimizer는 텐서플로가 기본 제공하는 경사 하강 라이브러리를 사용한다.
비용 함수를 가장 적게(minimize) 만드는 방향으로 학습(train)을 할 수 있도록 정의.
init = tf.global_varibale_initializer()
sess = tf.Session()
sess.run(init)
변수 초기화 후,
하나의 세션을 정의한다. (텐서플로 객체에서 세션을 얻어옴)
그리고 초기화.
for i in range(5001):
sess.run(train, feed_dict={X: xData, Y: yData})
if i % 500 == 0:
print (i, sess.run(cost, feed_dict={X: xData, Y: yData}), sees.run(W), sess.run(b))
실제 학습 시작. 1부터 5000까지.
500번에 1회씩 진행 상황 출력. 현재까지 진행된 학습의 회수, 각 변수 출력. 현재의 가중치와 현재의 b도 출력.
print(sess.run(H, feed_dict={X:[8]}))
이제 학습 완료 후, 8시간 일했을 때의 예측값을 얻도록 처리.