인공지능

[모두의 딥러닝] lab 06-1. TensorFlow로 Softmax Classification 구현하기

여니두 2019. 4. 10.

Softmax function

- 여러 개의 class를 예측할 때 굉장히 유용

- binary의 경우보다는 실생활에서는 여러 개를 예측하는 경우가 많음.

ex) 학점: A, B, C, D, F

- N개의 예측할 것들이 있을 때 사용한다.

 

- 주어진 X 값에 학습한 Weight를 곱하여 값을 만드는 것부터 시작.

- 나오는 값들은 실수인 score에 불과

- softmax 함수를 통과시키면 확률로 나오게 됨.

- 모든 class의 label들을 더하게 되면 1이 된다.

 

--> TensorFlow로 구현

- SCORES 값을 Logit 이라고도 부름.

- 결과: hypothesis가 어떤 label이 될 것인가에 대한 확률로 나오게 된다.

 

Cost function: cross entropy

- loss function은 tensorflow로 쉽게 구현 가능.

--> 이 값은 여러 개의 matrix 값이 될 것. 이것을 합을 한 후 평균 낼 것.

 

- cost를 minimize

--> gradient descent 알고리즘 적용

 

소스코드

- [x1, x2, x3, x4]의 4개 element씩 x_data가 있다.

- y_data 이전 binary data에는 숫자 하나 0 or 1로 주어졌지만

여러 class를 쓸 때는 한 자리로 표현하는 것이 불가

ex) 0, 1, 2의 class 중 어떻게 표시할까? ==> 'ONE-HOT' ENCODING

: 세 자리 중 하나만 HOT 하게 한다. (=1.0)

y_value를 one-hot encoding으로 표시하였음.

 

- placeholder

: shape 항상 조심!!

y의 개수는 ONE-HOT으로 표시하고 있기 때문에 3개!

= ONE-HOT으로 표시할 때는 y의 개수가 label의 개수(class의 개수)

 

- W, b

: shape 항상 조심!!

W = [X(들어오는 개수), Y(nb_class. 출력 값)]

b = [Y(nb_class. 출력 값)]

 

 

Test & one-hot encoding (어떻게 출력될까?)

- softmax를 통과하면 확률로 주어지게 된다.

- 여기에서 우리는 이것을 이용하여 feed_dict로 새 값을 던져준 후 예측해보고 싶다!

 

- 전체의 합은 1. 제일 큰 값이 최강자다. 이 과정을 tensorflow에서 자동으로 해주는 것: arg_max

- 결론: softmax 값을 우리가 원하는 label로 바꿀 때는 arg_max를 사용!

 

여러 개를 동시에 질문하는 경우?

 

- 확률로 답을 돌려준다.

 

 

댓글