Keras中MSE损失下准确率定义及val_acc指标含义问询
Keras中MSE损失下val_acc指标的疑问解答
咱们把你提到的问题拆开来,一步步说清楚:
1. Keras用MSE做损失时,准确率由什么函数定义?
首先得明确:Keras里的accuracy(也就是你看到的acc/val_acc)本质是分类任务的专属指标,默认逻辑是统计预测类别和真实类别一致的样本比例。但如果是回归任务(比如你的模型用了linear激活函数、损失设为MSE),要是编译模型时没指定合适的回归指标,反而保留了默认的accuracy,那这个指标的计算逻辑就变成了:判断每个样本的预测值和真实值的绝对差是否小于一个极小阈值(比如1e-7),然后统计满足这个条件的样本占总样本数的比例。
简单说,这个“准确率”是把分类任务的逻辑硬套在了连续值的回归任务上,其实完全不适用。
2. 这个准确率的定义是什么?是不是MAPE?
绝对不是MAPE!
- 这个默认
acc的定义刚才说了:满足预测值与真实值的绝对差小于极小阈值的样本占比,是0到1之间的比例值。 - 而MAPE(平均绝对百分比误差)是计算每个样本的
|真实值-预测值|/真实值的平均值,衡量的是预测值相对于真实值的百分比误差,和这个“准确率”完全不是一回事。
3. 你的训练输出里val_acc: 0.3250代表什么?
这个0.3250的意思是:在你的验证集里,有32.5%的样本的预测值和真实值的绝对差小于Keras默认的极小阈值(比如1e-7)。但这个指标对你的回归任务来说几乎没有参考价值——毕竟连续数值的预测很难刚好接近到这个程度,它根本反映不了模型的回归效果。
小建议
回归任务应该用专门的回归指标来评估,比如直接看MSE(均方误差)、MAE(平均绝对误差)、MAPE这些。你可以在编译模型的时候显式指定这些指标,比如:
model.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae', 'mape'])
这样训练时输出的就是对你有用的回归评估指标了。
内容的提问来源于stack exchange,提问作者Endre Moen
相关产品推荐
相关产品推荐

