【发布时间】:2020-06-07 13:31:50
【问题描述】:
我正在使用 keras 神经网络制作一个简单的分类算法。目标是获取 3 个天气数据点并确定是否发生野火。这是我用来训练模型的 .csv 数据集的图像(此图像只是前几行,并不是全部): wildfire weather dataset 如您所见,有 4 列,第四列要么是“1”,意思是“火”,要么是“0”,意思是“没有火”。我希望算法预测 1 或 0。这是我编写的代码:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
import csv
#THIS IS USED TO TRAIN THE MODEL
# Importing the dataset
dataset = 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 layer
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation =
'relu', input_dim = 3))
# classifier.add(Dropout(p = 0.1))
# Adding the second hidden layer
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation
= 'relu'))
# classifier.add(Dropout(p = 0.1))
# Adding the output layer
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation
= 'sigmoid'))
# Compiling the ANN
classifier.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/10
2146/2146 [==============================] - 2s 758us/step - loss: nan - accuracy: 0.0238
Epoch 2/10
2146/2146 [==============================] - 1s 625us/step - loss: nan - accuracy: 0.0000e+00
Epoch 3/10
2146/2146 [==============================] - 1s 604us/step - loss: nan - accuracy: 0.0000e+00
Epoch 4/10
2146/2146 [==============================] - 1s 609us/step - loss: nan - accuracy: 0.0000e+00
Epoch 5/10
2146/2146 [==============================] - 1s 624us/step - loss: nan - accuracy: 0.0000e+00
Epoch 6/10
2146/2146 [==============================] - 1s 633us/step - loss: nan - accuracy: 0.0000e+00
Epoch 7/10
2146/2146 [==============================] - 1s 481us/step - loss: nan - accuracy: 0.0000e+00
Epoch 8/10
2146/2146 [==============================] - 1s 476us/step - loss: nan - accuracy: 0.0000e+00
Epoch 9/10
2146/2146 [==============================] - 1s 474us/step - loss: nan - accuracy: 0.0000e+00
Epoch 10/10
2146/2146 [==============================] - 1s 474us/step - loss: nan - accuracy: 0.0000e+00
有谁知道为什么会发生这种情况以及我可以对我的代码做些什么来解决这个问题? 谢谢!
【问题讨论】:
-
嗨,您是否已经检查过您的数据是否包含
NaN或inf值? keras/tensorflow 根本不喜欢这样!我建议您将所有数据转换为float32,确保不包含此类值并应用标准规范化器(例如 sklearn 的那个)。 -
你能帮我打印几行 X 和 Y 吗?
-
请从 csv 文件中粘贴一些数据以查看发生了什么
-
请提供一个数据集,否则我将无法预测出什么问题?因为我使用的数据集可以正常工作吗?你的代码是正确的。并检查天气它不是 nan 或字符串值
标签: python tensorflow machine-learning keras neural-network