为 keras 模型编写和测试自定义损失或度量函数
writing and testing a custom loss or metric function for keras model
我尝试使用机器学习技术来预测事件发生的时间。我的预测将是长度为 20 的概率向量 v,v[i] 是
事件在 i + 1 天(i 的范围为 0 到 19)内发生的概率。
如何测试我编写的自定义损失函数和度量函数?
我想使用以下损失和指标来训练模型:
=%5Csum_%7Bi<20%7D(i+1)%5Ccdot(z_i-y_i)%5E2)
=%5Csum_%7Bi<20%7D(i+1)%5Ccdot(z_i-y_i))
她是我尝试实现它的方式:
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 。
我要找的是:
关于如何编写这些函数的一些具体技巧
关于测试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)))
我尝试使用机器学习技术来预测事件发生的时间。我的预测将是长度为 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)
我希望模型能够最小化度量(这基本上是一个期望,因为我的模型 returns 是一个概率向量)。然而,当我尝试拟合我的模型时,我发现指标始终为 0.0000e+00 。
我要找的是:
关于如何编写这些函数的一些具体技巧
关于测试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)))