我尝试使用机器学习技术来预测事件发生的时间。我的预测将是长度为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。
我正在寻找的是:
有关如何对这些函数进行编码的一些具体提示
有关测试keras.backend函数的一些一般提示
答案 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)))