为什么TensorFlow的’accuracy’值始终为0,尽管损失值在下降并且评估结果合理

我正在构建一个模型来执行方程y=mx+c的线性回归。我生成了一个包含1999个样本的CSV文件和一个模型,其中我可以更改归一化(开/关)、层数、节点数和轮数。我期望能够使用训练和评估的损失/准确度来指导选择这些变量,但在不知道答案的情况下,我对目前的结果感到困惑,概括如下:

Normalization   Layers  Nodes   Epochs  Start Loss  End Loss    AccuracyTRUE               1    200       5     0.6022      0.4348      0TRUE               1    200      50     0.5963      0.4347      0TRUE              10    200       5     0.5249      0.4525      0TRUE              10    200      50     0.5157      0.4418      0TRUE              10    500       5     0.5816      0.4825      0TRUE              10    500      50     0.5591      0.4422      0FALSE              1    200       5   996.2897      1.8313      0FALSE              1    200      50  1063.1994      1.7264      0FALSE             10    200       5   421.1371     40.6160      0FALSE             10    200      50   293.6943     46.2854      0FALSE             10    500       5   382.2659    297.2881      0FALSE             10    500      50   412.2182     79.7649      0

我使用的编译参数是

compile optimizer:adam loss:mean_absolute_error metrics:['accuracy'] loss_weights:[1.0]

一个示例模型摘要是

Model: "LRmodel"_________________________________________________________________Layer (type)                 Output Shape              Param #LR-input (InputLayer)        [(None, 1)]                 0 _________________________________________________________________dense (Dense)                (None, 200)               400_________________________________________________________________ML-LinearRegression (Dense)  (None, 1)                 201Total params: 601Trainable params: 601Non-trainable params: 0

示例拟合结果是

1600/1600 - 1s - loss: 1063.1994 - accuracy: 0.0000e+00 - val_loss: 90.2848 - val_accuracy: 0.0000e+00Epoch 2/51600/1600 - 0s - loss: 137.8654 - accuracy: 0.0000e+00 - val_loss: 2.1525 - val_accuracy: 0.0000e+00Epoch 3/51600/1600 - 0s - loss: 4.4340 - accuracy: 0.0000e+00 - val_loss: 3.4557 - val_accuracy: 0.0000e+00Epoch 4/51600/1600 - 0s - loss: 1.7573 - accuracy: 0.0000e+00 - val_loss: 3.1190 - val_accuracy: 0.0000e+00Epoch 5/51600/1600 - 0s - loss: 1.7264 - accuracy: 0.0000e+00 - val_loss: 3.2794 - val_accuracy: 0.0000e+00

此外,还有两个我不理解的问题

  1. 有时拟合的损失值始终很高且不会改变,模型无法计算结果。当这种情况发生时,我会再次运行训练(有时多次),最终得到上述结果,而数据和代码没有任何变化。
  2. 归一化产生的模型不如不归一化的模型准确。

回答:

你没有展示你的模型。然而,如果你在做线性回归,你不应该使用准确度作为度量。准确度是用于分类任务的,比如试图分类一张图片是狗还是猫。你应该在model.compile中使用适合线性回归的损失函数,如tf.keras.losses.MeanSquaredError。回归损失的文档在这里。这里。回归度量的文档在这里。这里

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注