【发布时间】:2019-09-27 01:29:49
【问题描述】:
我正在尝试添加 平均绝对误差百分比 (pmae) 作为 keras 中的自定义指标。这被定义为(MAE 除以平均绝对 y 值乘以 100)。我试过了:
def pmae(y_true,y_pred):
return K.mean(K.abs(y_pred - y_true)) / K.mean(K.abs(y_true)) * 100
...
model.compile(loss='mse', optimizer=Adam(),metrics=[pmae])
运行,但值相差许多数量级(当我查看 model.history.history.pmae 时)
工作的 numpy 版本(在测试样本上)是:
y_pred = model.predict(X_test)
pmae = abs(y_pred - y_test).mean() / abs(y_true).mean() * 100
我还尝试将 , axis=-1 添加到 K.mean() 调用中,但没有任何改进(如其他 stackoverflow 答案中所建议的那样)。有谁知道怎么回事?
资源
- keras website 以 y 的平均值为例:
import keras.backend as K
def mean_pred(y_true, y_pred):
return K.mean(y_pred)
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy', mean_pred])
- 其他人在 stackoverflow 上回答了其他自定义指标(例如 Keras custom RMSLE metric 和 how to implement custom metric in keras?),但那里的回复并没有帮助我计算 pmae。
【问题讨论】:
-
不能用faroit.com/keras-docs/1.1.1/metrics/…吗?我认为它们是一样的......
-
该链接指的是 MAPE(平均绝对百分比误差),它是不同的 [mean(abs(percent(error)))]。我正在尝试计算 PMAE,或 [percent(mean(abs(error)))],它对来自个人观察的大百分比不太敏感。
标签: python tensorflow keras neural-network deep-learning