我从 machinelearningmastery 获得了代码
我修改了 model.compile() 函数,添加了 mape 指标来计算平均绝对百分比误差。运行代码后,每个epoch的 mape 值都非常大,考虑到它是一个百分比指标。我是否遗漏了什么明显的问题,还是输出是正确的?输出如下所示:
Epoch 91/1000s - loss: 0.0103 - mean_absolute_percentage_error: 1764997.4502Epoch 92/1000s - loss: 0.0103 - mean_absolute_percentage_error: 1765653.4924Epoch 93/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1766505.5107Epoch 94/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1766814.5450Epoch 95/1000s - loss: 0.0102 - mean_absolute_percentage_error: 1767510.8146Epoch 96/1000s - loss: 0.0101 - mean_absolute_percentage_error: 1767686.9054Epoch 97/1000s - loss: 0.0101 - mean_absolute_percentage_error: 1767076.2169Epoch 98/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1767014.8481Epoch 99/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1766592.8125Epoch 100/1000s - loss: 0.0100 - mean_absolute_percentage_error: 1766348.6332
我运行的代码(省略了预测部分)如下所示:
回答:
我通过在调用compile之前使用 keras.backend.set_epsilon(1)
将模糊因子epsilon设置为1来解决这个问题。
提示在源代码中
def mean_absolute_percentage_error(y_true, y_pred):diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true), K.epsilon(), None))return 100. * K.mean(diff, axis=-1)
这意味着,由于某些未知原因,训练集上MAPE计算中的 K.abs(y_true)
项低于模糊默认值(1e-7),因此它使用了该默认值,从而导致了巨大的数值。