인공지능

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

여니두 2019. 5. 3.

softmax_cross_entropy_with_logits 함수

- 주어진 x에 대해 학습한 weight을 matrix로 곱하고 bias를 더하는 기본적 포맷에서 시작 = logits (= score)

- logits를 softmax에 통과시키면 우리가 원하는 최종 hypothesis, 확률이 나온다.

 

 

- 주어진 Y(ONE HOT으로 주어짐)와 hypothesis의 log값과 곱한다.

- 결과로 나온 matrix를 합하여 평균을 낸 것이 cost

- 계산이 복잡한데, 이 것을 최소화하기 위해 나온 함수가 softmax_cross_entropy_with_logits.

 

- 이름에 주목!!

: hypothesis 부분에 logits를 달라는 것.

: 두 개 입력값을 받아들임. (labels, logits)

- softmax에 들어가기 전에 logits를 이 함수에 넣어달라는 것. (중요)

- 이 값을 평균 내면 우리가 원하는 cost가 나온다. (앞의 1번 cost와 동일) 

- with_logits 이라는 이름에 유의: 항상 logit을 넘겨주는 것을 기억!

 

 

Animal classification with softmax_cross_entropy_with_logits

 

tf.one_hot and reshape

y_data: 표의 끝부분 열

Y 부분을 ONE-HOT으로 바꿔주는 작업을 해야함.

- tf.one_hot(Y, nb_classes) 함수

: Y = 0~6

: nb_classes = 몇 개의 class가 있어야지 알려주어야 함. (7개)

 

두번째 줄까지만 하면 에러가 나기 때문에 세번째 줄처럼 해 주어야 한다.

- 이유: N차원이면, 결과는 N+1차원으로 만들어주기 때문.

ex) [[0], [3]] (2차원 R=2) --> [[[1000000], [0001000]],  (3차원 R=3)

- 해결법: tf.reshape() 함수 사용

: Y_one_hot을 다시 reshape() 함수에 넣어주면 된다.

shape = [-1, nb_classes]

-1 = 나머지. everything을 뜻함.

ex) reshape --> [[1000000], [0001000]] : 우리가 이전에 manual하게 했던 결과가 그대로 나오게 됨.

 

 

소스코드

 

- prediction

: 예측 hypothesis를 argmax() 함수를 이용하여 label로 바꾼다.

: 확률 0~6 사이로 바꾸는 것!

- y_data.flatten()

: ex) [[1], [0]] --> [1, 0] 이렇게 평평하게 해주는 것.

- zip( , )

: 각각의 리스트, 안의 element를 편하게 넘겨주기 위하여 묶는 것. 

댓글