Tensorflow 中的加权 Mape
Weighted Mape in Tensorflow
我正在预测超市的每日销售额,我使用体积加权地图作为损失函数。
总和超过了输出节点。
我在 tensorflow 中实现了这个:
import tensorflow as tf
def weighted_mape_tf(y_true,y_pred):
tot = tf.reduce_sum(y_true)
wmape = tf.realdiv(tf.reduce_sum(tf.abs(tf.subtract(y_true,y_pred))),tot)*100
return(wmape)
不幸的是我的输出是:
Epoch 4/800
0s - loss: 69.3939 - mean_squared_error: 819.6549 - mean_absolute_error: 14.0599
Epoch 5/800
0s - loss: 66.0676 - mean_squared_error: 768.5440 - mean_absolute_error: 13.4120
Epoch 6/800
0s - loss: 63.3000 - mean_squared_error: 728.7665 - mean_absolute_error: 12.8934
Epoch 7/800
0s - loss: 62.0189 - mean_squared_error: 704.7637 - mean_absolute_error: 12.5851
Epoch 8/800
0s - loss: 60.4229 - mean_squared_error: 682.0646 - mean_absolute_error: 12.2814
Epoch 9/800
0s - loss: 59.6329 - mean_squared_error: 674.8835 - mean_absolute_error: 12.1172
Epoch 10/800
0s - loss: 58.5069 - mean_squared_error: 656.2922 - mean_absolute_error: 11.9073
Epoch 11/800
0s - loss: 58.0447 - mean_squared_error: 643.9082 - mean_absolute_error: 11.7542
Epoch 12/800
0s - loss: 56.9352 - mean_squared_error: 628.5248 - mean_absolute_error: 11.5936
Epoch 13/800
0s - loss: 56.3520 - mean_squared_error: 620.7517 - mean_absolute_error: 11.4170
Epoch 14/800
0s - loss: 55.8395 - mean_squared_error: 610.4476 - mean_absolute_error: 11.2979
Epoch 15/800
0s - loss: inf - mean_squared_error: 611.3271 - mean_absolute_error: 11.2931
Epoch 16/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 17/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 18/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 19/800
正如您在一段时间后看到的那样,它总是 NaN。
我猜错误是在 tot==0 时,但是当我插入一个简单的 if 转换时
tot 当 0 我仍然得到 NaN。
您有遇到过这个问题吗?
提前致谢
几分钟后,我找到了问题的答案:
import tensorflow as tf
def weighted_mape_tf(y_true,y_pred):
tot = tf.reduce_sum(y_true)
tot = tf.clip_by_value(tot, clip_value_min=1,clip_value_max=1000)
wmape = tf.realdiv(tf.reduce_sum(tf.abs(tf.subtract(y_true,y_pred))),tot)*100#/tot
return(wmape)
我用 clip_by_value 来更正 0
我正在预测超市的每日销售额,我使用体积加权地图作为损失函数。
总和超过了输出节点。
我在 tensorflow 中实现了这个:
import tensorflow as tf
def weighted_mape_tf(y_true,y_pred):
tot = tf.reduce_sum(y_true)
wmape = tf.realdiv(tf.reduce_sum(tf.abs(tf.subtract(y_true,y_pred))),tot)*100
return(wmape)
不幸的是我的输出是:
Epoch 4/800
0s - loss: 69.3939 - mean_squared_error: 819.6549 - mean_absolute_error: 14.0599
Epoch 5/800
0s - loss: 66.0676 - mean_squared_error: 768.5440 - mean_absolute_error: 13.4120
Epoch 6/800
0s - loss: 63.3000 - mean_squared_error: 728.7665 - mean_absolute_error: 12.8934
Epoch 7/800
0s - loss: 62.0189 - mean_squared_error: 704.7637 - mean_absolute_error: 12.5851
Epoch 8/800
0s - loss: 60.4229 - mean_squared_error: 682.0646 - mean_absolute_error: 12.2814
Epoch 9/800
0s - loss: 59.6329 - mean_squared_error: 674.8835 - mean_absolute_error: 12.1172
Epoch 10/800
0s - loss: 58.5069 - mean_squared_error: 656.2922 - mean_absolute_error: 11.9073
Epoch 11/800
0s - loss: 58.0447 - mean_squared_error: 643.9082 - mean_absolute_error: 11.7542
Epoch 12/800
0s - loss: 56.9352 - mean_squared_error: 628.5248 - mean_absolute_error: 11.5936
Epoch 13/800
0s - loss: 56.3520 - mean_squared_error: 620.7517 - mean_absolute_error: 11.4170
Epoch 14/800
0s - loss: 55.8395 - mean_squared_error: 610.4476 - mean_absolute_error: 11.2979
Epoch 15/800
0s - loss: inf - mean_squared_error: 611.3271 - mean_absolute_error: 11.2931
Epoch 16/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 17/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 18/800
0s - loss: nan - mean_squared_error: nan - mean_absolute_error: nan
Epoch 19/800
正如您在一段时间后看到的那样,它总是 NaN。 我猜错误是在 tot==0 时,但是当我插入一个简单的 if 转换时 tot 当 0 我仍然得到 NaN。
您有遇到过这个问题吗?
提前致谢
几分钟后,我找到了问题的答案:
import tensorflow as tf
def weighted_mape_tf(y_true,y_pred):
tot = tf.reduce_sum(y_true)
tot = tf.clip_by_value(tot, clip_value_min=1,clip_value_max=1000)
wmape = tf.realdiv(tf.reduce_sum(tf.abs(tf.subtract(y_true,y_pred))),tot)*100#/tot
return(wmape)
我用 clip_by_value 来更正 0