为啥尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0

Posted

技术标签:

【中文标题】为啥尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0【英文标题】:Why is the tensorflow 'accuracy' value always 0 despite loss decaying and evaluation results being reasonable为什么尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0 【发布时间】:2021-04-07 22:19:48 【问题描述】:

我正在学习如何使用 Tensorflow,并按照其中一个示例构建了一个模型来执行方程 y=mx+c 的线性回归。我生成了一个包含 1999 个样本的 csv 文件和一个模型,我可以在其中更改规范化(开/关)、层数、节点数和 epoch 数。在我事先不知道答案但对我的结果感到困惑的情况下,我希望能够使用训练和评估的损失/准确性来指导这些变量的选择,总结如下

Normalization Layers Nodes Epochs Start Loss End Loss Accuracy

真 1 200 5 0.6022 0.4348 0

真 1 200 50 0.5963 0.4347 0

真 10 200 5 0.5249 0.4525 0

真 10 200 50 0.5157 0.4418 0

真 10 500 5 0.5816 0.4825 0

真 10 500 50 0.5591 0.4422 0

假 1 200 5 996.2897 1.8313 0

假 1 200 50 1063.1994 1.7264 0

假 10 200 5 421.1371 40.6160 0

假 10 200 50 293.6943 46.2854 0

假 10 500 5 382.2659 297.2881 0

假 10 500 50 412.2182 79.7649 0

我使用的编译参数是

编译优化器:adam loss:mean_absolute_error 指标:['accuracy'] loss_weights:[1.0]

一个示例模型摘要是

型号:“LRmodel”


图层(类型)输出形状参数#

LR-输入 (InputLayer) [(None, 1)] 0


密集(密集)(无,200)400


ML-LinearRegression (Dense) (None, 1) 201

总参数:601

可训练参数:601

不可训练的参数:0

示例拟合结果为

1600/1600 - 1s - 损失:1063.1994 - 准确度:0.0000e+00 - val_loss:90.2848 - val_accuracy:0.0000e+00

纪元 2/5

1600/1600 - 0s - 损失:137.8654 - 准确度:0.0000e+00 - val_loss:2.1525 - val_accuracy:0.0000e+00

3/5 纪元

1600/1600 - 0s - 损失:4.4340 - 准确度:0.0000e+00 - val_loss:3.4557 - val_accuracy:0.0000e+00

4/5 纪元

1600/1600 - 0s - 损失:1.7573 - 准确度:0.0000e+00 - val_loss:3.1190 - val_accuracy:0.0000e+00

5/5 纪元

1600/1600 - 0s - 损失:1.7264 - 准确度:0.0000e+00 - val_loss:3.2794 - val_accuracy:0.0000e+00

另外还有2个问题我不明白

    有时拟合的高损失永远不会改变,模型无法计算结果。发生这种情况时,我会再次运行训练(有时多次)并最终获得上述结果,而无需更改数据或代码。 规范化生成的模型不如我不规范化模型时准确。

【问题讨论】:

我们在 SO 中已经评论过很多次了,准确率只是分类问题的指标,而不是回归的指标,所以在这种情况下使用它是没有意义的。 【参考方案1】:

你没有展示你的模型。但是,如果您正在进行线性回归,则不应将准确性用作指标。当您进行分类时使用准确性,例如尝试对图像是狗还是猫进行分类。您应该在 model.compile 中使用适合线性回归的损失函数,例如 tf.keras.losses.MeanSquaredError。回归损失的文档是 here. 回归指标的文档是 here.

【讨论】:

以上是关于为啥尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow:损失减少,但准确度稳定

比较模型之间的 AUC、对数损失和准确度得分

如何为我的 tensorflow 模型提高此数据管道的性能

为啥我所有的回归器显示的准确度都比我所有的分类器低得多?

如何在 Keras 中绘制 MLP 模型的训练损失和准确度曲线?

两个张量之间差异的损失函数