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

时间:2019-01-23 16:04:49

标签: python keras metrics loss-function

我尝试使用机器学习技术来预测事件发生的时间。我的预测将是长度为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)

我希望模型使度量最小化(这基本上是一个期望,因为我的模型返回了概率向量)。但是,当我尝试拟合模型时,会看到指标始终为0.0000e + 00。

我正在寻找的是:

  1. 有关如何对这些函数进行编码的一些具体提示

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

1 个答案:

答案 0 :(得分:2)

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