ETC/머신러닝, 딥러닝 실습

2-4. Linear Regression by Tensorflow (선형회귀 구현)

개발자킹콩 2020. 10. 28. 21:11

모두를 위한 머신러닝 / 딥러닝 : hunkim.github.io/ml/

 

 


주어진 x값에 대해서 예측을 어떻게 할 것인가가 Hypothesis 이고, W(weight)와 b(bios)의 합이다.

이렇게 예측한 값과 true value의 차이를 제곱으로 계산하여 평균하면 cost function의 값을 구할 수 있고, 이것의 최소값을 구하는 것이 우리의 목적이다.

 

 

 

이 Hypothesis(가설, 직선)는 W와 b에 따라 달라지고 cost역시 W와 b를 인자로 갖는 function이다.

여기서 우리가 말하는 학습이라는 것은 데이터를 읽어들이면서 이 cost값을 최소로 하는 W와 b의 값을 찾는 것이다.

 

 


 

 

Tensorflow의 큰 구조 3단계

1. 그래프를 build한다.

2. 해당 그래프를 실행한다.

3. return하여 값을 받는다.

 

 


 

 

 

x_train과 y_train은 실제 데이터를 의미하는 것이고, 각각 11, 22, 33이 대응되는 형태이다.

 

W(weight)와 b(bias)를 Variable라고 정의했는데,

여기서 Variable는 기존의 프로그래밍에서의 변수화는 조금 다른 개념이다.

"우리가 아닌 tensorflow가 사용할 Variable이다." 라고 생각하면 된다.

trainable variable로서 학습과정에서 tensorflow가 자체적으로 변경시키는 값이다

 

여기서 tensorflow의 variable을 만들 때에는

일단 tensorflow의 shape이 어떻게 되는가 정의하고 그 값을 인자로 전달하면 된다.

 

 

W와 b의 값을 모르기에 random한 값을 주게되고,

이 값의 shape을 값이 하나인 1차원 array, rank가 1인 데이터를 인자로 보내준다.

그 후, hypothesis를 정의한다.

 

 

 

이제 cost는 어떻게 할 것인가?

 

tf.reduce_mean(Tensor) --> tensor의 평균을 내주는 함수이다. 

 

 

 

그럼 이제 그 cost의 값을 최소화(minimize) 하는 작업이 필요하다.

tensor안에 GradientDescent라는 것이 존재하고 그것을 optimizer로 정의(자세한건 나중에)

그 optimize로 최소를 구하고 싶은 cost를 인자로 전달하면 된다.

tensor가 알아서 W와 b를 조절해서 cost의 최소를 구하는 것이다.

 

 

이렇게 그래프를 구현하였다.

train은 그래프의 node이다. train을 실행시켜 변수들을 구해보자

 


 

그래프를 만들었다면 이제 Session을 만들어서 run 실행하자!

 

 

주의!! Tensorflow Variable를 사용하는 경우

Session을 만들어 주고

실행 전 tf.global_variables_initializer() 를 run 해주어야한다.!!!!!!

train이 run되어야 cost가 minimize되고 Hypothesis를 구하고 쭉쭉 이어나간다.

 

 

 

train을 실행시켜서 결과를 확인 할텐데, 20번에 한번씩 출력하도록 한다.

여기서, cost와 W, b 값을 비교한다.

 

 

처음엔 random한 값들이 출력되지만, 반복으로 학습하며,

0, 1, 0에 가까워지는것을 확인하였다.

 

 

 


 

Placeholders

 

전 강의에서 사용했던, 그래프를 미리 만들어 놓고 값을 대입하며 실행하는 Placeholder로도 적용할 수 있다.

 

 

 

x_train, y_train을 처음에 설정하지 않고 그래프를 빌드한 상태에서

train 실행과 동시에 feed_dict으로 x와 y의 데이터를 전달하여 run실행 하는 것이 가능하다.

 

 

shape=[None] // 일차원 array이고 아무 값(갯수)이나 들어올 수 있음을 의미한다.

 

 

 

 

이상!! 오늘도 감코!!