저번에 포스팅한 내용은 Tensorflow의 아주 기본적인 동작방식에 대한 내용이었다. 물론 그렇다고 지금 포스팅이 아주 기술적인 내용이 될 것은 아니지만, 적어도 이번 포스팅은 개인적으로 기분이 좋은 포스팅이다. 왜냐하면 내가 처음으로 작성한 Tensorflow 코딩에 대한 line by line 설명 포스팅이니까.


Tensorflow 공식 홈페이지에 가면 "Get started" 메뉴가 있다. 그 메뉴를 클릭하면 제일 처음에 나오는 코드가 Linear Regression이다. 나는 한번 Multi linear regression을 작성해봤다. 별거 아니지만 그래도 뭐든 첫 시작은 의미가 있다.


자 코드를 한줄 한줄 설명하기 전에 어떤 Multi linear regression을 구현할 것인지 살짝 설명을 해보자. 특정 x와 y관계가 아래와 같다고 해보자.


y = 0.27*x1 + 0.28*x2 + 0.38*x3 + 0.54


x는 3차원 데이터이고 0.54라는 bias가 있는 식으로 y를 정의했다. Multi linear regression은 내가 예전에 포스팅을 해둔 것이 있다. 이 포스팅 내용에 나오는 수식을 바탕으로 Tensorflow 수식을 작성했다. 포스팅 링크는 아래에 있다.


http://operatingsystems.tistory.com/entry/Data-Mining-Multi-linear-regression


위의 포스팅 식을 정리하면,


y  = 0.27*x1 + 0.28*x2 + 0.38*x3 + 0.54

y^= a1*x1 + a2*x2 + a3*x3 + a4


에서 (y - y^)의 제곱의 차이를 최소화하기 위하여 a1, a2, a3, a4로 미분을 하여 적절한 a1, a2, a3, a4를 구하는 것이다. 즉 이 식을 Tensorflow로 작성하기 위해서 아래의 4스텝이 필요하다.


1. x와 y를 구한다.

2. y^을 구한다.

3. (y - y^)의 제곱의 합을 구한다.

4. 그 값에 대하여 미분을 수행한다.


위의 4스텝을 차근차근 Tensorflow로 작성해보자.


## Step1 : x와 y를 구한다.

x_data는 numpy로 랜덤하게 구한다. x1, x2, x3밖에 없는데 왜 4차원데이터를 구했는지 궁금하면... 위의 Multi linear regression포스팅을 보면 답이나온다.


## Step2 : y^을 구한다.

a는 변수이기 때문에 tf.Variable로 선언한다. shape은 당연히 4차원으로 한다. tf.random_uniform은 [numfeat] shape의 랜덤한 -1과 1사이의 숫자를 고르게(uniform하게) 얻기 위해서 필요하다. 즉, 우선 랜덤하게 a1, a2, a3, a4를 구해놓고 나중에 optimize하겠다는 것이다.


## Step3 : (y - y^)의 제곱의 합을 구한다.

y - y^은 위와 같이 y_data-formula로 구하면 된다. 그 값들에 대하여 square를 구하고 그 값들을 reduce_mean한다. 여기서 reduce의 의미는 여러 숫자가 하나의 숫자로 됐다는 의미의 reduce이다. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10이라는 열 개의 숫자에 대하여 평균을 구하면 5.5라는 하나의 숫자로 표현된다. 숫자 10개가 숫자 하나로 줄여져서 표현된다는 것이다. 그런 의미에서의 reduce이다. 


## Step4 : 그 값에 대하여 미분을 수행한다.

Gradient Descent를 이용하여 미분하여 loss를 최소화하는 식을 세운다.


위의 과정을 모두 끝냈으면 마지막으로 Variable Initialize하고 Tensorflow 돌리면 된다.

위의 식에서 epochs는 200으로 두었다. 당연히 우리가 원하는 45번째 줄에서의 a의 값은 33번째 줄에 나타나있는 것처럼 0.54, 0.27, 0.48, 0.38이 되어야 한다. 실제로 그렇게 나오는지 위의 코드를 수행해보자.


# 코드 실행


우와 진짜 트레이닝 후에는 0.54, 0.27, 0.48, 0.38로 값이 가까워진다. 우와.


뭐 이렇게 하는거다. 이번 포스팅에서는 Multi linear regression을 Tensor flow를 구현했다. 다음 포스팅은 SVM 구현이다. SVM 구현하고 ANN까지 구현해볼거다. 어떤 알고리즘이나 함수를 구현하는 포스팅은 내 스타일상 맞지는 않다. 그런데 Tensorflow는 한 3개정도는 해봐도 될거 같다고 생각해서 포스팅한다. 그 3개가 Multi linear regression, SVM, ANN이다. 순전히 Tensorflow를 잘 활용하고 익숙해지기 위한 연습예제이다. 

'etc...' 카테고리의 다른 글

[Semantic Web] Linked Data and RDF  (0) 2017.02.06
[Semantic Web] Basic of Semantic Web  (2) 2017.02.06
[Tensorflow] Basic of Tensorflow  (0) 2016.11.27
[Programming] OOP  (0) 2015.12.18
[Algorithm] Graph  (0) 2015.12.18
Posted by 빛나유
,