본문 바로가기
AI/모두를 위한 딥러닝 정리

Day2. regression의 원리와 간단한 구현

by reindeer002 2022. 2. 28.
728x90

Regression

> 어떤 Linear한 선을 찾는 것이 Regression(회귀) 학습이다.
> 이때 Hypothesis(Linear한 선을 그리기 전에 임의로 그리는 일종의 가설)를 설정해야하는데 그 식은 아래와 같다.

H(x) = Wx + b, W: 가중치 b: 편향값

Hypothesis의 모습


Cost(Loss) function

> 어떤 식이 data에 가장 잘 맞는 식인지 찾기 위해 Cost function을 사용하여 Cost가 최소화되는 식을 찾아야 한다.

Cost function에 대한 자세한 설명

 

> 이때, H(x) = Wx + b이므로 아래와 같이 표현된다.

cost function

> 그럼 다음시간엔 cost값을 최소화하는 방법에 대해서 배워볼 것이다.


node run flow

> 위와 같은 그림으로 코드가 실행됨
> 아래 코드는 순서대로 placeholder를 사용하지 않은 코드, 사용한 코드임

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

x_train = [1, 2, 3]
y_train = [1, 2, 3]

#variable은 우리가 아는 변수가 아닌 tensorflow가 내부적으로 변경되는 변수라고 이해
#즉, 학습하면서 스스로 해당 변수를 변경하게 됨
#shape과 name을 주게 됨
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

#H(x)
hypothesis = x_train * W + b

#cost를 구하는 코드
cost = tf.reduce_mean(tf.square(hypothesis - y_train))

#learning_rate는 파라미터(이때 파라미터는 W, b가 됨)의 변화율을 나타냄
#즉, 높으면 높을수록 정확하지 않은 학습률을 나타내고, 낮으면 낮을수록 정확한 학습률을 나타냄
#하지만 높으면 높을수록 시간이 적게 걸리고 낮으면 낮을수록 시간이 오래 걸림
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost)

sess = tf.Session()
#Variable 노드를 실행시킴
sess.run(tf.global_variables_initializer())

#2000번 실행시키면서 20번마다 step에 대한 정보를 출력
for step in range(2001):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(cost), sess.run(W), sess.run(b))
        #run을 통해 return받은 cost, W, b의 값을 봐야함
        #만약 print(cost)와 같이 출력하면 node의 정보가 출력됨
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

#x_train = [1, 2, 3]
#y_train = [1, 2, 3]
#placeholder를 통해 x_train, y_train을 대체한 후 사용도 가능함
X = tf.placeholder(tf.float32, shape=[None])
Y = tf.placeholder(tf.float32, shape=[None])

#variable은 우리가 아는 변수가 아닌 tensorflow가 내부적으로 변경되는 변수라고 이해
#즉, 학습하면서 스스로 해당 변수를 변경하게 됨
#shape과 name을 주게 됨
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

#H(x)
hypothesis = X * W + b

#cost를 구하는 코드
cost = tf.reduce_mean(tf.square(hypothesis - Y))

#learning_rate는 파라미터(이때 파라미터는 W, b가 됨)의 변화율을 나타냄
#즉, 높으면 높을수록 정확하지 않은 학습률을 나타내고, 낮으면 낮을수록 정확한 학습률을 나타냄
#하지만 높으면 높을수록 시간이 적게 걸리고 낮으면 낮을수록 시간이 오래 걸림
optimizer = tf.train.GradientDescentOptimizer(learning_rate = 0.01)
train = optimizer.minimize(cost)

sess = tf.Session()
#Variable 노드를 실행시킴
sess.run(tf.global_variables_initializer())

for step in range(2001):
    #train에 대한 값은 필요 없으므로 _로 표현
    cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X:[1, 2, 3, 4, 5], Y:[2.1, 3.1, 4.1, 5.1, 6.1]})
    if step % 20 == 0:
        print(step, cost_val, W_val, b_val)
        
#우리의 모델을 테스트
print(sess.run(hypothesis, feed_dict={X: [5]}))
print(sess.run(hypothesis, feed_dict={X: [2.5]}))
print(sess.run(hypothesis, feed_dict={X: [1.5, 3.5]}))
728x90

댓글