본문 바로가기
AI

머신러닝 스터디 -04 코드정리

by Wonryeol 2020. 3. 17.

머신러닝 코드를 분석하면서 의미를 따져보고자 한다. ( 이해하면서 외우기 편하게끔 만들기 위함 ) 

 

먼저 정규화 메소드를 정의하여 각 값이 0~1사이에 있게끔 만들어 준다. 



이는 이상값의 존재를 없애줄 뿐만 아니라 오버슈팅 등을 막아주는 역할을 하기도 한다.

 

 

 

머신러닝 코드 분석------

 

1) 변수 정의

 

 

먼저 각 데이터를 뽑아, x_data 에 독립변수를 넣고 y_data 에 종속 변수를 저장해준다. 

 

placeholder를 통해, 각 데이터를 넣을 공간을 정립 ( 실제 training 을 돌릴때는 이 변수 안에 있는 데이터 값을 분석한다.) 

 

임의의 W, B 값을 정의해준다. ( random normal 로 하는 이유는 트레이닝을 시킬 경우, 알아서 찾아 들어가기 때문에 굳이 정해주지 않은 것 같다. // 하지만 대학원생이 말하길, 실제로는 아무 값이나 넣으면 안된다고 한다. 학습량을 줄이기 위해서인듯 하다... 하지만  아직 그부분까진 공부하지 않았다.)

 

2) 식정의

가장 중요한 부분이다.

 

먼저, hypothesis 에 우리가 구하고자 하는 식을 정의한다.

 

그리고 cost를 정의한다. , cost는 함수와 특정 데이터와의 거리값을 구하는 것이기 며, 음수가 나와선 안되기 때문에 square 함수를 써준다. cost는 알고리즘이 실행되기 위해서는 가장 근본적으로 존재해야 하는 정의식중 하나이다. 

+reduce mean 은 줄여서 평균을 구한다, 즉 스퀘어 값들을 모두 더하고 나눠 평균을 구한다는 뜻이다. 

 

마지막으로 learning rate 를 설정한 이후 train 을 진행하여 준다. 

 

 

하지만 짚고 넘어갈 것이 있다. 그것은 Optimizer 를 어떻게 정의하는가 이다. 

 

Optimizer 뒤에 minimize(cost) 매서드를 붙이는 순간, 이는 단지 gradientDescentOptimizer를 뜻하는 것이 아닌 학습을 시키기 위한 training method 가 된다. 

 

 

이렇게 말이다. 

 

이 두 매소드간의 차이는 Session 에서 발생한다.

 

 

3) Session

이는 첫번째 ( minimize(cost) 가 Optimizer에서 실행되지 않은 메서드 ) 코드이다.

먼저 세션 안에서 각 변수를 초기화 시켜 준 후, 100번의 학습을 진행한다.

100번의 학습은 다음과 같다. 

cost_val, hypo_val 에 Session 에서 가지는 cost, hypothesis 의 값을 제공해 주며, _ 에 train 이 제공해 주는 값을 넣는다.

앞에서 설명했 던 것들을 종합하여 보면, train 에서 정의했던 minimize(cost)를 실행한다는 것이다. 

 

즉, 중심 학습 코드는 train 이 진행하였다는 것을 알 수 있다. 

 

하지만, 두번째 코드는 약간 다르다. 

 

 

물론 이 코드는 linear Regression을 위한 코드가 아닌 mnist 를 위한 코드, 즉 텍스트를 읽기 위한 코드이지만, 머신러닝 특성상 일맥상통하다.

 

27번째 코드를 보면, optimizer가 저곳에 있는 것을 볼 수 있다.



여기서의 optimizer 는 minimize(cost)를 실행한 코드로, 해당 학습률로 minimize(cost)를 진행한다는 뜻이다.

 

 

4) 정리 

 

이 두가지를 비교해 보면 간단한 머신러닝 플로우를 예측할 수있다.

 

 

1. 데이터 받기

2.데이터가 들어갈 슬롯 (빈칸) 정의

3. WX + B 식 정의

4. cost 함수 정의 ( Hypothesis - WX+B 이용 ) 

5. tensorflow.train.GradientDecentOptimizer(학습률)

6. minimize(cost)

7. Session()

 

이다. 

 

 

ps /// 추가 알아놓으면 좋을 코드, 개념들

axis = 축 ex) rank 4 를 가진 array 는 axis를 0,1,2,3 까지 표시할 수 있다. 

 

 

ndim  = rank 크기

 

shape = 해당 matrix 의 모습 / 4행 3열의 matrix 이면 (4,3) return 

 

session.run 을 통해 실행시킬 수도 있지만, 개별 코드를 실행시키고자 할 때, .eval() 을 붙여준다.

 

constant([ ... ]) << 행렬 상수 생성

 

 

 

 

 

 

 

댓글