【问题标题】:Custom loss function Keras for y_pred above a certain threshold value onlyy_pred 的自定义损失函数 Keras 仅高于某个阈值
【发布时间】:2020-10-12 14:52:53
【问题描述】:

如何在 keras 回归中编写自定义损失函数,其中 MAE 仅针对高于某个阈值的 y_pred 计算。 例如。 y_true = [10 , 14 , 23 , 30 , 5 , 4] ,
y_pred = [8 , 12 , 27 , 38 , 10 , 8]

如何编写自定义损失函数,其中仅计算 y_pred 值大于 20 的 MAE(平均绝对误差),即 y_pred > 20 的 MAE 即 [23,30] 得出 6 [(27-23) + (38 -30)]/2

这个问题出现了,因为我需要只正确预测最高预测范围的模型,这样我就可以只使用那些返回最高预测的数据点,因为其余的较低预测数据对我没有用。 像 -

def custom_loss(y_pred, y_true):
    for y_pred > 20:
        result =MAE(y_pred , y_true)
    return result

【问题讨论】:

    标签: python tensorflow keras deep-learning neural-network


    【解决方案1】:

    对于 Keras 损失函数,据我了解,您应该坚持使用 Keras 后端函数。看看here,我已经链接了 Tensorflow Keras 后端文档。

    有一个函数可能对您有用,称为 map_fn,它允许您将函数映射到所有 y_pred y_true 对,但可能有几种不同的方法可以解决这个问题,文档应该会有所帮助!

    【讨论】:

    • 感谢您的回复。在我需要 MAE 用于 y_pred、y_true 对(其中 y_pred > 20)的即时情况下,您能否帮助编写任何一种可能对我有用的方法。我来自非编程背景,正在学习它并在这里遇到了障碍。
    【解决方案2】:

    这样试试

    def custom_loss(y_true, y_pred):
        
        y_pred = y_pred[y_pred>20]
        y_true = y_true[y_pred>20]
        
        return tf.reduce_mean(tf.abs(y_true-y_pred))
    
    n_sample = 1000
    X = np.random.uniform(0,5, (n_sample,10))
    y = np.random.randint(0,50, n_sample)
    
    inp = Input((10,))
    x = Dense(32, activation='relu')(inp)
    out = Dense(1)(x)
    model = Model(inp, out)
    
    model.compile('adam',loss=custom_loss)
    model.fit(X,y, epochs=10)
    

    这种损失可能会导致 nan,因为批次中的所有预测都可能低于 20,因此请注意预测的大小

    【讨论】:

      猜你喜欢
      • 2016-12-05
      • 2018-04-02
      • 2018-12-30
      • 2020-12-19
      • 2017-12-18
      • 2020-03-27
      • 1970-01-01
      • 2019-12-28
      • 2020-09-21
      相关资源
      最近更新 更多