Точность реагирования: 0,0000e + 00 в модели Keras - PullRequest
0 голосов
/ 03 мая 2020

Ниже представлена ​​моя модель 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

1 Ответ

0 голосов
/ 03 мая 2020
  • Ваша окончательная функция активации кажется неуместной.

    Обычно для задач двоичной классификации с 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...