Sparse_categorical_crossentropy 및 categorical_crossentropy (각도, 정확도)


20

어느 것이 정확도에 더 좋거나 같습니까? 물론 categorical_crossentropy를 사용하는 경우 하나의 핫 인코딩을 사용하고 sparse_categorical_crossentropy를 사용하는 경우 일반 정수로 인코딩합니다. 또한, 어느 것이 다른 것보다 더 좋은가?

답변:


26

클래스가 상호 배타적 일 경우 (예 : 각 샘플이 정확히 하나의 클래스에 속하는 경우) 희소 범주 형 상호 엔트로피를 사용하고, 한 샘플에 여러 클래스가 있거나 레이블이 소프트 확률 일 경우 범주 형 크로스 엔트로피를 사용하십시오 (예 : [0.5, 0.3, 0.2]).

범주 형 교차 엔트로피에 대한 공식 (S-샘플, C-클래스, 샘플은 클래스 c에 속함)은 다음과 같습니다.에스

1에스에스1에스영형(에스)

클래스가 배타적 인 경우 클래스를 합산 할 필요가 없습니다. 각 샘플의 경우 0이 아닌 값만 진정한 클래스 c의 경우 영형(에스) 입니다.

이를 통해 시간과 메모리를 절약 할 수 있습니다. 상호 배타적 일 때 10000 개의 클래스를 고려하십시오. 각 샘플에 대해 10000을 합산하는 대신 단 1 개의 로그, 10000 부동 소수점 대신 하나의 정수만 고려하십시오.

공식은 두 경우 모두 동일하므로 정확도에 영향을 미치지 않아야합니다.


1
예를 들어 mnist 자리수 데이터 세트와 같이 정확도에 다른 영향을 미칩니 까?
Master M

1
수학적으로 차이는 없습니다. 구현에 의해 계산 된 값 (예 : tensorflow 또는 pytorch)에 상당한 차이가 있으면 버그처럼 들립니다. 무작위 데이터 (1000 클래스, 10,000 샘플)에 대한 간단한 비교는 차이가 없음을 보여줍니다.
frenzykryger

친애하는 frenzykryger, 당신은 하나의 샘플 경우에 대한 마이너스를 잊어 버린 것 같습니다 : "각 샘플에 대해서만 0이 아닌 값은 -log (p (s c))입니다." 나머지는 좋은 대답입니다.
Nicg

네가 옳아. 감사!
frenzykryger

@ frenzykryger 나는 다중 출력 문제를 해결하고 있습니다. 나는 3 개의 별도 출력을 가지고 o1,o2,o3있으며 각각에는 167,11,7클래스가 있습니다. 나는 아무런 차이가 없지만 사용 여부에 따라 차이가 있다는 답을 읽었습니다 sparse__. 첫 번째 클래스에 167 개의 클래스가 있으므로 categorical마지막 2 sparse개와 첫 번째 클래스 로 갈 수 있습니까 ?
Deshwal

5

한마디로 대답

대상이 one-hot 인코딩 된 경우 categorical_crossentropy를 사용하십시오. 원핫 인코딩의 예 :

[1,0,0]
[0,1,0] 
[0,0,1]

그러나 대상이 정수이면 sparse_categorical_crossentropy를 사용하십시오. 정수 인코딩의 예 (완료를 위해) :

1
2
3

에 대한 단일 출력 노드가 필요 sparse_categorical_crossentropy합니까? 그리고 그 from_logits주장은 무엇을 의미합니까?
Leevo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.