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.