uos-machine-learning
Keras Custom Loss 만들기 본문
Keras는 다양한 손실함수를 제공한다. 사용하는 방법도 간단하다.
from keras import losses
model.compile(loss=losses.mean_squared_error, optimizer='sgd')
하지만 딥러닝 관련 여러 프로젝트를 진행하다보면 Custom loss를 만들고 싶은 욕심이 생긴다.
예를 들어 segmentation에서 dice-coef를 손실함수로 만들고자 할 때는 아래와 같이 설계하면 된다.
def dice_coef(y_true, y_pred):
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + K.epsilon()) / (K.sum(y_true_f) + K.sum(y_pred_f) + K.epsilon())
def dice_coef_loss(y_true, y_pred):
return 1-self.dice_coef(y_true, y_pred)
K는 케라스를 벡엔드로 쓰는 함수를 사용할 수 있게 해준다. 단 나누기 연산이 있을 때는 분모가 0이 되는 것을 방지하기 위해 K.epsilon()를 더해준다.
binary_crossentropy와 dice_coef를 합치는 것도 가능하다.
def bce_dice_loss(y_true, y_pred):
loss = losses.binary_crossentropy(y_true, y_pred) + dice_coef_loss(y_true, y_pred)
return loss
'딥러닝' 카테고리의 다른 글
Yolo v3 논문 리뷰 (0) | 2019.09.18 |
---|---|
파이썬 라이브러리 소개 - imgaug (1) | 2019.09.12 |
CycleGAN Implementataion 코드에 Wasserstein loss 추가하기(Pytorch) (0) | 2019.09.08 |
Tensorflow 2.0 Neural Style Transfer 튜토리얼 (5) | 2019.05.14 |
Image Super Resolution Evaluation Metric 케라스 구현 (0) | 2019.05.11 |
Comments