ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tensorflow 손실 함수 종류(Loss function, tf.keras.losses)
    카테고리 없음 2022. 10. 31. 10:11
    반응형

    1. 목차

     

    2. 활용법

    2.1 model compile에서 손실함수 설정

    model.compile에서는 loss 파라미터에 손실함수를 지정할때 사용 가능하다.

    2.1.1 Name으로 설정하기

    각 손실함수는 name이라는 파라미터를 가지고 있다.

    default값으로 각각 name이 지정되어 있으며 이를 통해서 해당 함수를 사용 가능하다.

    단, name으로 사용할 경우 내부 파라미터를 지정할수 없다.(기본 파라미터로 사용된다.)

    model.compile(loss = 'sparse_categorical_crossentropy', 
                  optimizer = tf.keras.optimizers.SGD(learning_rate=0.01), 
                  metrics = ['accuracy'])

    2.1.2 Class 이름으로 설정하기

    Class이름을 통해서 손실함수를 사용 가능하다.

    이 경우에는 내부 파라미터를 지정할 수 있다.

    아래 예시에서는 from_logits를 True로 설정하였다.(default값은 False이다.)

    model.compile(loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
                  optimizer = tf.keras.optimizers.SGD(learning_rate=0.01), 
                  metrics = ['accuracy'])

    3. CrossEntropy류

    from_logit=True : 기존에는 0~1 범위의 값만 받아야하지만 범위제한을 해제

    3.1 binary_crossentropy

    tf.keras.losses.BinaryCrossentropy(
        from_logits=False,
        label_smoothing=0.0,
        axis=-1,
        reduction=losses_utils.ReductionV2.AUTO,
        name='binary_crossentropy'
    )
    y_true = [0, 1, 0, 0]
    y_pred = [-18.6, 0.51, 2.94, -12.8]
    loss = tf.keras.losses.BinaryCrossentropy(from_logits=True)
    loss(y_true, y_pred).numpy()
    #=> 0.865

    3.2 CategoricalCrossentropy

    tf.keras.losses.CategoricalCrossentropy(
        from_logits=False,
        label_smoothing=0.0,
        axis=-1,
        reduction=losses_utils.ReductionV2.AUTO,
        name='categorical_crossentropy'
    )
    y_true = [[0, 1, 0], [0, 0, 1]]
    y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
    # Using 'auto'/'sum_over_batch_size' reduction type.
    cce = tf.keras.losses.CategoricalCrossentropy()
    cce(y_true, y_pred).numpy()
    #=> 1.177

    3.2 SparseCategoricalCrossentropy

    tf.keras.losses.SparseCategoricalCrossentropy(
        from_logits=False,
        ignore_class=None,
        reduction=losses_utils.ReductionV2.AUTO,
        name='sparse_categorical_crossentropy'
    )
    y_true = [1, 2]
    y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]]
    # Using 'auto'/'sum_over_batch_size' reduction type.
    scce = tf.keras.losses.SparseCategoricalCrossentropy()
    scce(y_true, y_pred).numpy()
    #=> 1.177
    반응형

    댓글

Designed by Tistory.