[모두의 딥러닝] lab 06-2. TensorFlow로 Fancy Softmax Classification 구현하기
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를 편하게 넘겨주기 위하여 묶는 것.
'인공지능' 카테고리의 다른 글
[모두의 딥러닝] lec 07-2. Application & Tips: Training / Testing data sets (0) | 2019.05.03 |
---|---|
[모두의 딥러닝] lec 07-1. Application & Tips: 학습 rate, Overfitting, 그리고 일반화 (Regularization) (0) | 2019.05.03 |
[모두의 딥러닝] lab 06-1. TensorFlow로 Softmax Classification 구현하기 (1) | 2019.04.10 |
[모두의 딥러닝] lec 06-2. Softmax classifier의 cost 함수 (0) | 2019.04.08 |
[모두의 딥러닝] lec 06-1. Softmax Regression: 기본 개념 소개 (0) | 2019.04.08 |
댓글