首页 > 解决方案 > 为什么尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0

问题描述

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

归一化层 节点 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个问题我不明白

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

标签: pythontensorflowmachine-learningkeras

解决方案


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


推荐阅读