【发布时间】:2018-05-14 22:40:16
【问题描述】:
如何在 Keras 中实现此指标?我下面的代码给出了错误的结果! 请注意,我正在通过 exp(x) - 1 撤消先前的 log(x + 1) 转换,负面预测也被剪裁为 0:
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
我做错了什么?谢谢!
编辑:设置axis=0 似乎给出的值非常接近正确值,但我不确定,因为我似乎使用的所有代码都使用axis=-1。
【问题讨论】:
标签: python deep-learning keras metrics