tensorflow keras로 분류모델을 만들어야 되던 중 '#손실함수(loss function)' 때문에 고민에 빠졌다.
라벨링 데이터는 다음과 같았다
1: 즐거움, 2: 무서움, 3: 재밌음, 4: 우울함 ...
실질적으로 1,2,3,4로 표현되었다.
"명목형(categorical) 변수니까... categorical 관련된 손실함수를 써야되겠구나"
-> keras.categorical_crossentropy 손실함수가 연관검색어로 바로 나왔다.
아무 생각 없이 썼다. 그런데 정확도가 말도 안되게 낮게 나왔다.
내가 모르고 쓴 함수가 뭔가 잘못됐다는 것을 직감했다.
찾다보니... 손실함수를 잘못 썼다.
categorical_crossentropy, sparse_categorical_corssentropy 모두 '다중분류 손실함수'가 맞다.
그런데..
categorical_crossentropy 는
라벨링 변수가 one-hot encoding일 때 쓰는 손실함수고,
y_true: [[ 1, 0, 0], [0, 1, 0], [0, 0, 1]]
y_pred:[ [.8, .1, .1], [.3, .5, .2], [.1, .1, .8]]
-> 이에 대한 오차를 계산함.
sparse_categorical_crossentropy
라벨링 변수가 integer 일 때 쓰는 손실함수다.
y_true: [1, 2, 3]
y_pred:[ [.8, .1, .1], [.3, .5, .2], [.1, .1, .8]]
-> 이에 대한 오차를 계산함.
참고