【问题标题】:writing and testing a custom loss or metric function for keras model为 keras 模型编写和测试自定义损失或度量函数
【发布时间】:2019-06-17 06:42:07
【问题描述】:

我尝试使用机器学习技术来预测事件发生的时间。我的预测将是长度为 20 的概率向量 v,v[i] 是 事件在 i + 1 天内发生的概率(i 范围从 0 到 19)。

如何测试我编写的自定义损失和度量函数?

我想使用以下损失和指标来训练模型:

她是我尝试实现它的方式:

from keras import backend as K

def weighted_meansquare(y_true, y_pred):
    w = K.constant(np.array([i + 1 for i in range(20)]))
    return K.sum(K.square(w * y_pred - w * y_true))

def esperance_metric(y_true, y_pred):
    w = K.constant(np.array([i + 1 for i in range(20)]))
    return K.sum(w * y_true - w * y_true)

我希望模型能够最小化度量(这基本上是一个期望,因为我的模型返回一个概率向量)。然而,当我尝试拟合我的模型时,我发现指标始终为 0.0000e+00 。

我正在寻找的是:

  1. 关于如何编写这些函数的一些具体提示

  2. 有关测试 keras.backend 函数的一些一般提示

【问题讨论】:

    标签: python keras metrics loss-function


    【解决方案1】:

    您对esperance_metric 的定义有误:您使用y_true - y_true 而不是y_pred - y_true,这就是您的指标始终为0 的原因。

    我还在weighted_meansquare 中看到了一个错误。取正方形后,您应该乘以w,如下所示:

    K.sum(w * K.square(y_pred - y_true))
    

    一般来说,如果您想测试后端功能,您可以尝试使用K.eval 评估它们。例如:

    y_pred = K.constant([1.] * 20)
    y_true = K.constant([0.] * 20)
    print(K.eval(esperance_metric(y_true, y_pred)))
    

    【讨论】:

    • 我糟糕的是那些愚蠢的错误正是我需要测试我的代码的原因。 K.eval 成功了。单元测试我来了...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 2021-09-21
    • 2018-11-24
    • 2020-12-19
    • 2017-12-18
    • 2020-03-27
    • 1970-01-01
    • 2021-02-24
    相关资源
    最近更新 更多