카테고리 없음

참고: tensorflow Loss 함수에 존재하는 from_logits란

GrayHEAD 2023. 6. 29. 01:00

https://hwiyong.tistory.com/335

 

tensorflow Loss 함수에 존재하는 from_logits란

Binary_crossentropy나 Categorical_crossentropy 함수에선 공통적으로 from_logits 인자를 설정할 수 있습니다. 기본값은 모두 False로 되어있는데요. True, False의 차이점을 보도록 하겠습니다. 먼저 가벼운 예제

hwiyong.tistory.com

# 1번 코드
cce = tf.keras.losses.CategoricalCrossentropy(from_logits = True)

target = [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]] 
output = [[1., 0., 0.], [.05, .89, .06], [.05, .01, .94]]

loss = cce(target, output)

print(loss.numpy())
  • 0.5889537
# 2번 코드
cce = tf.keras.losses.CategoricalCrossentropy(from_logits = False)

target = [[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]] 
output = [[1., 0., 0.], [.05, .89, .06], [.05, .01, .94]]

loss = cce(target, output)

print(loss.numpy())
  • 0.059469786

 

딥러닝에서 쓰이는 logit은 매우 간단합니다. 모델의 출력값이 문제에 맞게 normalize 되었느냐의 여부입니다. 예를 들어, 10개의 이미지를 분류하는 문제에서는 주로 softmax 함수를 사용하는데요.

이때, 모델이 출력값으로 해당 클래스의 범위에서의 확률을 출력한다면, 이를 logit=False라고 표현할 수 있습니다. logit이 아니라 확률값이니까요(이건 저만의 표현인 점을 참고해서 읽어주세요).

반대로 모델의 출력값이 sigmoid 또는 linear를 거쳐서 확률이 아닌 값이 나오게 된다면, logit=True라고 표현할 수 있습니다. 말 그대로 확률이 아니라 logit이니까요.

 

결론: 클래스 분류 문제에서 softmax 함수를 거치면 from_logits = False(default값),

그렇지 않으면 from_logits = True.

+ 텐서플로우에서는 softmax 함수를 거치지 않고, from_logits = True를 사용하는게 numerical stable하다고 설명하고 있다.

 

https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1_%ED%9A%8C%EA%B7%80
https://www.tensorflow.org/api_docs/python/tf/keras/losses/CategoricalCrossentropy