Keras神经网络训练时准确率始终为0

我正在使用Keras神经网络创建一个简单的分类算法。目标是根据天气数据的3个数据点来判断是否有野火发生。以下是我用来训练模型的.csv数据集的图像(此图像仅显示了前几行,并不是完整的数据集):野火天气数据集如你所见,数据集有4列,第四列的值为“1”表示“有火”,值为“0”表示“无火”。我希望算法能预测出1或0。以下是我编写的代码:

import numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport kerasfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom sklearn.preprocessing import StandardScalerfrom sklearn.model_selection import train_test_splitimport csv#THIS IS USED TO TRAIN THE MODEL# Importing the datasetdataset = pd.read_csv('Fire_Weather.csv')dataset.head()X=dataset.iloc[:,0:3]Y=dataset.iloc[:,3]X.head()obj=StandardScaler()X=obj.fit_transform(X)X_train,X_test,y_train,y_test=train_test_split(X, Y, test_size=0.25)print(X_train.shape)print(X_test.shape)print(y_train.shape)print(y_test.shape)classifier = Sequential()    # Adding the input layer and the first hidden layerclassifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation =                                                       'relu', input_dim = 3))   # classifier.add(Dropout(p = 0.1))   # Adding the second hidden layerclassifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation                                                                    = 'relu'))   # classifier.add(Dropout(p = 0.1))   # Adding the output layerclassifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation                                                                = 'sigmoid'))       # Compiling the ANNclassifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics                                                           = ['accuracy'])classifier.fit(X_train, y_train, batch_size = 3, epochs = 10)y_pred = classifier.predict(X_test)y_pred = (y_pred > 0.5)print(y_pred)classifier.save("weather_model.h5")

问题是每次运行时,我的准确率始终是“0.0000e+00”,并且我的训练输出看起来像这样:

    Epoch 1/102146/2146 [==============================] - 2s 758us/step - loss: nan - accuracy: 0.0238Epoch 2/102146/2146 [==============================] - 1s 625us/step - loss: nan - accuracy: 0.0000e+00Epoch 3/102146/2146 [==============================] - 1s 604us/step - loss: nan - accuracy: 0.0000e+00Epoch 4/102146/2146 [==============================] - 1s 609us/step - loss: nan - accuracy: 0.0000e+00Epoch 5/102146/2146 [==============================] - 1s 624us/step - loss: nan - accuracy: 0.0000e+00Epoch 6/102146/2146 [==============================] - 1s 633us/step - loss: nan - accuracy: 0.0000e+00Epoch 7/102146/2146 [==============================] - 1s 481us/step - loss: nan - accuracy: 0.0000e+00Epoch 8/102146/2146 [==============================] - 1s 476us/step - loss: nan - accuracy: 0.0000e+00Epoch 9/102146/2146 [==============================] - 1s 474us/step - loss: nan - accuracy: 0.0000e+00Epoch 10/102146/2146 [==============================] - 1s 474us/step - loss: nan - accuracy: 0.0000e+00

有谁知道这是为什么,以及我可以对代码做些什么来解决这个问题吗?谢谢!


回答:

编辑: 我意识到我之前的回答非常具有误导性,幸运的是被@xdurch0和@Timbus Calin指出了。这里是经过编辑的答案。

  1. 检查所有输入值是否有效。你的训练数据中是否有naninf值?

  2. 尝试使用不同的激活函数。ReLU很好,但它容易出现所谓的死亡ReLU问题,神经网络基本上学不到任何东西,因为它的权重没有更新。一种可能性是使用Leaky ReLU或PReLU

  3. 尝试使用梯度裁剪,这是一种用来处理梯度消失或梯度爆炸的技术(这很可能是你遇到的问题)。Keras允许用户为优化器配置clipnormclip value

在Stack Overflow上有一些报告类似问题的帖子,比如这个,你可能也会感兴趣。

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

发表回复

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