这个 MAPE 实现是否适用于多维输出?

数据挖掘 深度学习 美国有线电视新闻网
2022-02-13 12:03:02

我目前正在研究一个 CNN 问题,其中输出是一个 60x59 的数值数组。我想验证我正在使用的平均绝对百分比误差 (MAPE) 函数是否会通过将每个对应点与真实值匹配来正确考虑错误,而不是意外行为。这个配方会起作用吗?

def percent_mean_absolute_error(y_true, y_pred):
    if not K.is_tensor(y_pred):
        y_pred = K.constant(y_pred)
    y_true = K.cast(y_true, y_pred.dtype)
    diff = K.mean(K.abs((y_pred - y_true)) / K.mean(K.clip(K.abs(y_true),
                                                           K.epsilon(),
                                                           None)))
    return 100. * K.mean(diff)

这里的 K 是 keras.backend。我只想知道这个函数是否通过从输入到输出的点到点正确映射函数来正确考虑错误?

1个回答

您可以直接使用Keras API for TensorFlow中的平均绝对百分比误差 (MAPE) 函数,也可以使用该函数来测试您的自定义函数。

tf.keras.losses.MAPE代码可在TensorFlow GitHub 存储库中找到:

def mean_absolute_percentage_error(y_true, y_pred):  
  y_pred = ops.convert_to_tensor(y_pred)
  y_true = math_ops.cast(y_true, y_pred.dtype)
  diff = math_ops.abs(
      (y_true - y_pred) / K.maximum(math_ops.abs(y_true), K.epsilon()))
  return 100. * K.mean(diff, axis=-1)