为 keras 模型编写和测试自定义损失或度量函数

writing and testing a custom loss or metric function for keras model

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

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

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

equation using Online Equation Editor

equation using Online Equation Editor

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

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)

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

我要找的是:

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

  2. 关于测试keras.backend函数的一些一般技巧

您在 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)))