为什么我的Keras模型在训练时准确率总是0?

我构建了一个简单的Keras网络:

import numpy as np;from keras.models import Sequential;from keras.layers import Dense,Activation;data= np.genfromtxt("./kerastests/mydata.csv", delimiter=';')x_target=data[:,29]x_training=np.delete(data,6,axis=1)x_training=np.delete(x_training,28,axis=1)model=Sequential()model.add(Dense(20,activation='relu', input_dim=x_training.shape[1]))model.add(Dense(10,activation='relu'))model.add(Dense(1));model.compile(optimizer='adam',loss='mean_squared_error',metrics=['accuracy'])model.fit(x_training, x_target)

从我的源数据中,我删除了两列,如你所见。一列是包含字符串格式日期的列(在数据集中,除了这一列外,我还有一列是天,一列是月,一列是年,所以我不需要那一列),另一列是我用作模型目标的列。

当我训练这个模型时,我得到了这样的输出:

32/816 [>.............................] - ETA: 23s - loss: 13541942.0000 - acc: 0.0000e+00800/816 [============================>.] - ETA: 0s - loss: 11575466.0400 - acc: 0.0000e+00 816/816 [==============================] - 1s - loss: 11536905.2353 - acc: 0.0000e+00     Epoch 2/10 32/816 [>.............................] - ETA: 0s - loss: 6794785.0000 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5381360.4314 - acc: 0.0000e+00     Epoch 3/10 32/816 [>.............................] - ETA: 0s - loss: 6235184.0000 - acc: 0.0000e+00800/816 [============================>.] - ETA: 0s - loss: 5199512.8700 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5192977.4216 - acc: 0.0000e+00     Epoch 4/10 32/816 [>.............................] - ETA: 0s - loss: 4680165.5000 - acc: 0.0000e+00736/816 [==========================>...] - ETA: 0s - loss: 5050110.3043 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5168771.5490 - acc: 0.0000e+00     Epoch 5/10 32/816 [>.............................] - ETA: 0s - loss: 5932391.0000 - acc: 0.0000e+00768/816 [===========================>..] - ETA: 0s - loss: 5198882.9167 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5159585.9020 - acc: 0.0000e+00     Epoch 6/10 32/816 [>.............................] - ETA: 0s - loss: 4488318.0000 - acc: 0.0000e+00768/816 [===========================>..] - ETA: 0s - loss: 5144843.8333 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5151492.1765 - acc: 0.0000e+00     Epoch 7/10 32/816 [>.............................] - ETA: 0s - loss: 6920405.0000 - acc: 0.0000e+00800/816 [============================>.] - ETA: 0s - loss: 5139358.5000 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5169839.2941 - acc: 0.0000e+00     Epoch 8/10 32/816 [>.............................] - ETA: 0s - loss: 3973038.7500 - acc: 0.0000e+00672/816 [=======================>......] - ETA: 0s - loss: 5183285.3690 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5141417.0000 - acc: 0.0000e+00     Epoch 9/10 32/816 [>.............................] - ETA: 0s - loss: 4969548.5000 - acc: 0.0000e+00768/816 [===========================>..] - ETA: 0s - loss: 5126550.1667 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5136524.5098 - acc: 0.0000e+00     Epoch 10/10 32/816 [>.............................] - ETA: 0s - loss: 6334703.5000 - acc: 0.0000e+00768/816 [===========================>..] - ETA: 0s - loss: 5197778.8229 - acc: 0.0000e+00816/816 [==============================] - 0s - loss: 5141391.2059 - acc: 0.0000e+00    

为什么会这样?我的数据是一个时间序列。我知道对于时间序列,人们通常不使用Dense神经元,但这只是一个测试。真正困扰我的是准确率总是0。而且,在其他测试中,我甚至遇到了损失值变为”NAN”的情况。

有谁能帮我解决这个问题吗?


回答:

你的模型似乎对应于一个回归模型,原因如下:

  • 你在输出层使用了linear(默认的)作为激活函数(在前一层使用了relu)。

  • 你的损失函数是loss='mean_squared_error'

然而,你使用的度量标准metrics=['accuracy']适用于分类问题。如果你想做回归,请移除metrics=['accuracy']。也就是说,使用

model.compile(optimizer='adam',loss='mean_squared_error')

以下是Keras中用于回归和分类的度量标准列表(摘自这篇博客文章):

Keras回归度量标准

•均方误差:mean_squared_error, MSE或mse

•平均绝对误差:mean_absolute_error, MAE, mae

•平均绝对百分比误差:mean_absolute_percentage_error, MAPE, mape

•余弦相似度:cosine_proximity, cosine

Keras分类度量标准

•二元准确率:binary_accuracy, acc

•分类准确率:categorical_accuracy, acc

•稀疏分类准确率:sparse_categorical_accuracy

•前k分类准确率:top_k_categorical_accuracy(需要指定k参数)

•稀疏前k分类准确率:sparse_top_k_categorical_accuracy(需要指定k参数)

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中创建了一个多类分类项目。该项目可以对…

发表回复

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