binary_crossentropy 정리

seono·2022년 12월 1일
0

1. binary crossentropy

분류 손실함수 중 하나로 이진 분류 모델에 사용

이미지 출처 : https://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-7/06-multi_classification

2. 이진 분류 모델

  • True / False, 양성 / 음성 등 2개의 클래스를 분류할 수 있는 모델
  • 이진 분류 모델의 예측값은 0과 1 사이의 확률값
  • 예측값이 0에 가깝다면 False(혹은 True), 예측값이 1에 가깝다면 True(혹은 False)일 확률이 높음


3. 함수식

이미지 출처 : https://towardsdatascience.com/understanding-pytorch-loss-functions-the-maths-and-algorithms-part-1-6e439b27117e

4. Tensorflow 예시 코드

tf.keras.losses.BinaryCrossentropy(
	from_logits=False,
	label_smoothing=0.0,
	axis=-1,
	reduction=losses_utils.ReductionV2.AUTO,
	name='binary_crossentropy'
    )
코드 출처 : https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy
from keras.preprocessing import sequence
from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM, Bidirectional

#  this function builds, trains and evaluates a keras LSTM model 
def build_and_evaluate_model(x_train, y_train, x_develop, y_develop):

x_train = sequence.pad_sequences(x_train, maxlen = 100)
x_dev = sequence.pad_sequences(x_develop, maxlen = 100)
    
model = Sequential()
model.add(Embedding(input_dim = 10000, output_dim = 50))  #input_dim or the size of the data set, e.g vocabulary 
model.add(Bidirectional(LSTM(units = 25)))
model.add(Dense(1,activation='sigmoid'))
model.predict(x_develop)
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics=['accuracy'])
model.fit(x = x_train, y = y_train, batch_size = 32, epochs = 10, validation_data = (x_develop, y_develop))
    
    score, acc = model.evaluate(x_develop, y_develop)
 
    return score, acc, model
코드 출처 : https://siegel.work/blog/LossFunctions/

5. 활성화 함수

  • y값(출력값)이 0에서 1 사이의 값인 sigmoid를 사용
    → 이 때문에 binary crossentropy는 sigmoid crossentropy라 불리기도 함
  • 출력값이 0과 1 중 어디에 가까운지에 따라 이진 분류 가능
  • 다만 sigmoid 함수는 기울기 소실과 학습 속도 문제가 있으므로 출력층에서만 사용하는 것을 권장
  • 은닉층(입력층과 출력층 사이)에서는 사용하지 않는 것이 좋음
  • 입력층에서 sigmoid 함수를 사용하고자 한다면 sigmoid 함수를 일부 보완한 tahn(Hyperbolic Tangent) 함수를 대신 사용하는 것을 추천

6. 참고 자료

https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy
https://bskyvision.com/822
https://gooopy.tistory.com/52
https://kh-kim.gitbook.io/natural-language-processing-with-pytorch/00-cover-7/06-multi_classification
https://towardsdatascience.com/understanding-pytorch-loss-functions-the-maths-and-algorithms-part-1-6e439b27117e
https://siegel.work/blog/LossFunctions/

profile
데이터분석 뽀개기

0개의 댓글