“加权”均方根的自定义损失

时间:2019-09-02 20:05:39

标签: python tensorflow keras

我正在用Keras / TF进行回归 预测值的范围为-1至1。 在我的用例中,符号错误是个大问题,所以我想预测一下:

  • 正确值

  • 但是在上面,正确的符号

例如,如果我必须预测+0.01,则预测+0.1比预测-0.01的问题少。 同样,如果我必须预测-0.01,则预测-0.1比预测+0.01少了一个问题

尽管我会使用自定义损失来惩罚更多错误符号。 因此,从类似rmse的函数中,我添加了系数来对这样的错误进行签名:

def loss_rmse2(y_true, y_pred):
    z = K.zeros_like(y_true)
    tp = K.switch( tf.logical_and( K.greater(y_true, z), K.greater(y_pred, z)) , K.square(y_true-y_pred), z)
    fp = K.switch( tf.logical_and( K.less(y_true, z), K.greater(y_pred, z)) , K.square(y_true-y_pred), z)
    tn = K.switch( tf.logical_and( K.less(y_true, z), K.less(y_pred, z)) , K.square(y_true-y_pred), z)
    fn = K.switch( tf.logical_and( K.greater(y_true, z), K.less(y_pred, z)) , K.square(y_true-y_pred), z)
    return K.sqrt(K.mean(tp) + 2 * K.mean(fp) + K.mean(tn) + 2 * K.mean(fn) )

问题是我的模型无法收敛到解决方案。

有什么想法要解决吗?

谢谢

损失功能: Loss

1 个答案:

答案 0 :(得分:0)

如果您要进行二进制分类,我建议将归一化为0到1(加1,然后除以2),然后使用keras.losses.binary_crossentropy(y_true, y_pred)