akaSonny
[Tensorflow/Keras] Custom loss function 만들기 본문
Study (Programming)/Tensorflow-Keras
[Tensorflow/Keras] Custom loss function 만들기
Jihyeoning 2022. 9. 30. 14:34딥러닝 모델을 만들다 보면 내장되어 있는 함수 말고 내가 원하는 loss function을 만들어야 할 때가 있다.
사실 꼭 필요하진 않지만,, 모델의 목적에 따라 바꿔쓸 때가 생긴다. 뭐 경진대회 용이면 대회에 쓰는 score를 loss function으로 사용해서 그 점수가 좋아지도록 학습 방향을 설정한다던가.. 할때 ?
가장 먼저 큰 틀은 다음과 같다.
import tensorflow.keras.backend as K
def custom_loss_function(y_true, y_pred):
loss = ...
return loss
원하는 함수를 위와 같이 만들어준다. 이 때 입력인자는 실제값과 예측값을 순서대로 받기! 변수명은 상관없음
그리고 모델을 complie 할 때, loss 부분에 이 함수를 넣어주면 된다!
model.compile(optimizer=optimizer, loss=custom_loss_function)
이제 예시를 들어보자!
내장 함수에는 mean square error (MSE) 는 있지만, root mean square error (RMSE) 는 없다.
우리 분야는 평가지표를 RMSE를 많이 쓰기 때문에, 나는 학습시킬 때 RMSE를 loss function으로 사용하는편 (뭐 물론 mse에 루트 씌운 거랑 같지만 .. 혹시 모르니 ㅎㅎ)
RMSE custom loss function
import tensorflow.keras.backend as K
def rmse(y_true, y_pred):
loss = K.sqrt(K.mean(K.square(y_pred - y_true)))
return loss
그리고 나는 Weighted RMSE (WRMSE) 를 정말 많이 쓴다.
그냥 RMSE는 평균을 구하는 것이면, WRMSE는 값에 따라, 혹은 예측 시점에 따라 가중치를 달리 해서 RMSE값에 곱해준다.
Weighted RMSE loss function
import tensorflow.keras.backend as K
def weighted_rmse(y_true, y_pred):
weight = ...
loss = K.square(y_pred - y_true)
loss = loss * weight
loss = K.sqrt(K.sum(loss))
return loss
'Study (Programming) > Tensorflow-Keras' 카테고리의 다른 글
[TF/Keras] Custom Datagenerator로 Multiple Input 넣기 (0) | 2024.04.11 |
---|---|
[Tensorflow/keras] callbacks 사용하기 (훈련 중 모델 저장 / EarlyStop) (1) | 2024.02.01 |
[Tensorflow/Keras] MNIST 학습시키기 (1) | 2022.10.18 |