본문 바로가기

머신러닝 읽어주는 남자

[Tensorflow 101 - 1] Linear regression

반응형

Linear regression은 hypothesis 함수를 이용하여 데이터에 맞는 함수의 파라미터를 학습하는 알고리즘입니다.

 

(1,3) (2,5) (3,7) 라는 데이터를

 

데이터를 제일 잘 표현하는

 

y = ax+b라는

 

hypothesis(가설) 함수의 variable a&b를 학습하게 된다. 

 

Hypothesis라고 부르는 이유는 이러한 1차원 함수가 저 데이터를 나타낼 수 있다고 가정하기 때문입니다.

 

 

improt tensorflow as tf

# 트레이닝 데이터 정의
x_data = [1,2,3]
y_data = [3,5,7]

# 트레이닝 데이터를 넣을 placeholder를 정의, placeholder는 사이즈를 지정할 필요 없다.
x = tf.placeholder(tf.float32, name = "x")
y = tf.placeholder(tf.float32, name= "y" )

#학습할 파라미터(variable)정의, 스칼라 값이므로 shape은 []로 만든다.
a = tf.Variable(tf.random_normal([],mean = 0, stddev= 1),name = "a")
b = tf.Variable(tf.zeros([]), name ="b")

#본격 함수 정의, x_data를 넣게되면 array형태의 결과 값이 나온다.
hyp = a*x + b

#코스트 함수(추측된 y 값과 실제 y값의 차이를 최소화한다. mean square error
cost = reduce_mean(tf.square(hyp-y))

#gradient descent optimizer를 선언하고 위에 선언한 cost 함수와 물린다.
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.1)
train = optimizer.minimize(cost)

#with 문구로 선언하여 session를 따로 close 할 필요가 없어진다.
with tf.Session() as sess:
    #변수 초기화를 해준다. 이때 위에서 선언한 random_normal등이 실행되게 된다.
    sess.run(tf.global_variables_inializer())
    #50회를 반복하고 반복할때마다 학습된 값을 출력한다.
    for iter in range(50):
       _ , c_val = sess.run([train, cost], feed_dict = {x: x_data, y:y_data})
       print(iter,c_val, sess.run(a), sess.run(b)


반응형