Keras에서 어떻게이 메트릭을 구현합니까? 내 코드는 잘못된 결과를 제공합니다! I는 EXP 비아 (X + 1) 변형 (X) 이전에 로그를 취소있어 주 - 1, 또한 부정적인 예측을 0으로 클리핑된다Keras 커스텀 RMSLE 메트릭
비교 용def rmsle_cust(y_true, y_pred):
first_log = K.clip(K.exp(y_pred) - 1.0, 0, None)
second_log = K.clip(K.exp(y_true) - 1.0, 0, None)
return K.sqrt(K.mean(K.square(K.log(first_log + 1.) - K.log(second_log + 1.)), axis=-1)
가 여기 표준 NumPy와 구현이다 :
def rmsle_cust_py(y, y_pred, **kwargs):
# undo 1 + log
y = np.exp(y) - 1
y_pred = np.exp(y_pred) - 1
y_pred[y_pred < 0] = 0.0
to_sum = [(math.log(y_pred[i] + 1) - math.log(y[i] + 1)) ** 2.0 for i,pred in enumerate(y_pred)]
return (sum(to_sum) * (1.0/len(y))) ** 0.5
내가 뭘 잘못하고있어? 감사!
EDIT : 설정 axis=0
은 올바른 값을 제공하는 것으로 보이지만 모든 코드가 사용 된 것 같아서 잘 모르겠습니다. axis=-1
.
감사합니다.하지만 exp (x) - 1 변환은 어떻게됩니까? – Fernando
@ 페르난도 나는 당신이 그 변환이 필요하다고 생각하지 않는다. https://www.kaggle.com/wiki/RootMeanSquaredLogarithmicError – LYu
내 모델이 로그 (x + 1)에 맞기 때문에 필자는 exp (x) - 1을 입력 한 다음 RMSLE을 적용하십시오. – Fernando