본문 바로가기

카테고리 없음

[tf.keras] loss function sparse_categorical_crossentropy categorical_crossentropy 차이

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]]

-> 이에 대한 오차를 계산함.

 

참고

stackoverflow.com/questions/58565394/what-is-the-difference-between-sparse-categorical-crossentropy-and-categorical-c