카테고리 없음

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
반응형