본문 바로가기

🤖딥러닝

다중 분류 손실함수(categorical_crossentropy 와sparse_categorical_crossentropy 차이)

반응형

 

손실 함수(loss function)는 해당 데이터를 가지고 어떤 형태의 예측을 할 것인지에 따라 선택하면 되는데,

그중, 다중 클래스 분류를 위해 사용되는 손실 함수에 대해 정리해보고자 한다.

 

일반적으로 다중 클래스 분류 시 'categorical_crossentropy'를 손실함수로 사용한다.

그런데 'sparse_categorical_crossentropy'또한 다중 클래스 분류 시 손실 함수로 사용할 수 있다.

그렇다면 두 손실함수는 어떤 차이가 있을까?

 

결론적으로,

훈련데이터의 label(y / target) 값이 원-핫 벡터 형태인경우  categorical_crossentropy 를 사용하고

훈련 데이터의 label(y / target) 값이 정수(Int) 형태인 경우에는 sparse_categorical_crossentropy를 사용하면 된다.

 

둘 중 어느 손실 함수를 사용하든지 정확도에는 영향을 끼치지 않으며, sparse_categorical_crossentropy의 경우 one-hot-encoding을 하지 않기 때문에 메모리 소요가 적다는 장점이 있다.

 

 

 


 

1️⃣ categorical_crossentropy

tf.keras.metrics.categorical_crossentropy(
    y_true, y_pred, from_logits=False, label_smoothing=0.0, axis=-1)
    
y_true = [[0, 1, 0], [0, 0, 1]]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
loss = tf.keras.losses.categorical_crossentropy(y_true, y_pred)
assert loss.shape == (2,)
loss.numpy()

categorical_crossentropy의 경우, y_true = [[0, 1, 0], [0, 0, 1]]원-핫 벡터 형태임을 알 수 있다.

 

 

 

2️⃣ sparse_categorical_crossentropy

tf.keras.metrics.sparse_categorical_crossentropy(
    y_true, y_pred, from_logits=False, axis=-1)
    
y_true = [1, 2]
y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
loss = tf.keras.losses.sparse_categorical_crossentropy(y_true, y_pred)
assert loss.shape == (2,)
loss.numpy()

 

반면, sparse_categorical_crossentropy의 경우  y_true = [1, 2] 정수 형태임을 알 수 있다. 

 

 

 

🖇참고문헌

https://www.tensorflow.org/api_docs/python/tf/keras/metrics/sparse_categorical_crossentropy#used-in-the-notebooks_1

반응형