반응형
손실 함수(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] 로 정수 형태임을 알 수 있다.
🖇참고문헌
반응형