下面是我的Keras模型,用于训练数据集,其中training_x设置为4个带浮点的输入,training_y设置为0或1。 对于第一个时期,它的精度约为3.6000e-05。 然后,它给出了精度:在整个过程的第二个纪元开始时,为0.0000e + 00。我不是如何解决它。你能给我一些建议吗?
import numpy as np
import pandas as pd
from keras.models import Sequential
model = Sequential()
from keras.layers import Dense
model.add(Dense(units=128, activation='selu', input_dim=4))
model.add(Dense(units=64, activation='selu'))
model.add(Dense(units=1, activation='softmax'))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
CSV_FILE = "ddos.csv"
df = pd.read_csv(CSV_FILE)
df.loc[(df.Label == "ddos"), "Label"] = 1
df.loc[(df.Label == "Benign"), "Label"] = 0
x_train = np.array(df[["Flow Pkts/s", "Flow IAT Mean", "Flow IAT Max", "Flow IAT Min"]])
y_train = np.array(df[["Label"]])
# x_train and y_train are Numpy arrays --just like in the Scikit-Learn API.
model.fit(x_train, y_train, epochs=100, batch_size=128)
这是纪元2的输出:
1991296/2000000 [============================>.] - ETA: 0s - loss: nan - accuracy: 3.6157e-05
1994368/2000000 [============================>.] - ETA: 0s - loss: nan - accuracy: 3.6102e-05
1998208/2000000 [============================>.] - ETA: 0s - loss: nan - accuracy: 3.6032e-05
2000000/2000000 [==============================] - 33s 17us/step - loss: nan - accuracy: 3.6000e-05
Epoch 2/100
128/2000000 [..............................] - ETA: 25:27 - loss: nan - accuracy: 0.0000e+00
3840/2000000 [..............................] - ETA: 1:17 - loss: nan - accuracy: 0.0000e+00
8064/2000000 [..............................] - ETA: 49s - loss: nan - accuracy: 0.0000e+00
11776/2000000 [..............................] - ETA: 42s - loss: nan - accuracy: 0.0000e+00
16256/2000000 [..............................] - ETA: 36s - loss: nan - accuracy: 0.0000e+00
20096/2000000 [..............................] - ETA: 34s - loss: nan - accuracy: 0.0000e+00
答案 0 :(得分:0)
您的最终激活功能似乎不正确。
通常,对于具有1个输出神经元的二进制分类问题,我们使用sigmoid
激活函数而不是softmax
。
尝试规范化数据。删除数据框中的任何nan
或缺少的值。
x_train = (x_train - np.max(x_train))/(np.max(x_train) - np.min(x_train))
y_train = np.array(y_train, dtype = 'float32')
使用x
和y
,float32
而不是整数。
df.loc[(df.Label == "ddos"), "Label"] = 1.
df.loc[(df.Label == "Benign"), "Label"] = 0.