1. 비용함수

비용(cost): 가설이 얼마나 정확한지 판단하는 기준

비용함수

  • (예측값-실제값)^2의 평균

  • W(1차함수의 기울기 값)과 b(Y 절편)를 이용하여 비용 함수를 구함

  • 비용 함수로 구한 비용이 적을수록 좋음

2. 경사 하강(Gradient Descent)

  • 해당 함수의 최소값 위치를 찾기 위해 비용함수의 그레디언트 반대 방향으로 정의한 step size를 가지고 조금씩 움직여 가면서 최적의 파라미터를 찾는 방법.

  • 그래디언트: 파라미터에 대해 편미분한 벡터를 의미, 이 파라미터를 반복적으로 조금씩 움직이는 것이 관건

  • 텐서플로우는 경사 하강 라이브러리를 제공함

3. 실제로 적용해보기

import tensorflow as tf
xData = [1, 2, 3, 4, 5, 6, 7]
yData = [250000, 55000, 75000, 110000, 128000, 155000, 180000]
W = tf.Variable(tf.random_uniform([1], -100, 100))
"""가중치, 가설의 기울기, random_uiform은 random 범위 설정"""
b = tf.Variable(tf.random_uniform([1], -100, 100))
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
H = W * X + b
"""1차식 정의"""
cost = tf.reduce_mean(tf.square(H - Y))
"""reduce_mean은 평균값"""
a = tf.Variable(0.01)
"""경사 하강의 크기"""
optimizer = tf.train.GradientDescentOptimizer(a)
"""경사하강 라이브러리""" 
train = optimizer. minimize(cost)
"""실제로 비용함수를 가장 적게 만들 수 있도록 학습 해주는 부분"""
init = tf.global_variables_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:
    """500번에 한번씩 현재 머신러닝 과정 보여주도록 변수 출력"""
    print(i, sess.run(cost, feed_dict={X: xData, Y: yData}), sess.run(W), sess.run(b))
print(sess.run(H, feed_dict={X: [8]}))
"""8시간 동안 장사꾼이 일했을때 매출량 예상"""

tf.Variable(): 초기값을 설정해주는 것입니다.

tf.random_uniform(shape, minval=0, maxval=none, seed=none): 난수 초기값입니다. shape은 개수를 의미하며, 최소값, 최대값, 초기값(seed)을 설정합니다. 

tf.placeholder(): 구조를 설정해줍니다. tf.float32는 실수형에서 텐서의 배열을 설정해주는 것 입니다. 구조가 어떤지 모를때는 행열을 따로 입력하지 않습니다.

tf.reduce_mean(): 평균을 구합니다.

+ Recent posts