C.W.K.
Stream
Lesson 03 of 06 · published

Loss와 metric — 올바른 선택

~11 min · loss, metric, classification, regression

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

잘못된 loss는 model 없는 것보다 나빠

Loss는 model이 뭘 최적화하는지 정의해. 잘못 고르면 어떤 architecture 튜닝도 보상 못 해. 잘 고르면 평범한 model도 수렴.

Classification:

  • Multi-class + 정수 label — SparseCategoricalCrossentropy(from_logits=True)
  • Multi-class + one-hot label — CategoricalCrossentropy(from_logits=True)
  • 이진 또는 multi-label (샘플당 여러 label 가능) — BinaryCrossentropy(from_logits=True)

Regression:

  • 표준 — MeanSquaredError
  • Outlier-robust — Huber(delta=1.0) — 작은 에러엔 MSE, 큰 에러엔 MAE
  • 순수 L1 — MeanAbsoluteError

Custom loss는 시그니처 (y_true, y_pred) -> tensor인 함수. 샘플별 loss 반환하고 Keras가 batch 평균.

Code

Custom focal loss — for class imbalance·python
import tensorflow as tf
from tensorflow import keras

def focal_loss(y_true, y_pred, gamma=2.0, alpha=0.25):
    """Focal loss for class-imbalanced data (RetinaNet paper)."""
    bce = keras.losses.binary_crossentropy(y_true, y_pred, from_logits=True)
    p_t = tf.exp(-bce)
    return tf.reduce_mean(alpha * (1 - p_t) ** gamma * bce)

model.compile(loss=focal_loss, optimizer='adam')
Multi-output loss + metric mapping·python
model.compile(
    optimizer='adam',
    loss={'class_out': 'sparse_categorical_crossentropy',
          'bbox_out': 'mse'},
    loss_weights={'class_out': 1.0, 'bbox_out': 0.1},
    metrics={'class_out': ['accuracy'],
             'bbox_out': ['mae']},
)

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.