Вопрос о целевом размере данных для обучения классификатору softmax глубокого обучения - PullRequest
0 голосов
/ 07 апреля 2019

Набор данных, содержащий 777 показаний (строки) и 29 объектов (столбцы), последняя функция помечена как 0 или 1. Однако я не уверен, как разделить метки на образцы.

Я отделилсямои данные для тестирования и обучения: от строки 1 до 625 я изменил свою матрицу, чтобы она стала трехмерной, 104 выборки, содержащие 6 шагов чтения с 28 функциями.Размер массива (104,6,28) Проделал то же самое из строки 626–776 для данных тестирования, в результате чего получился массив размером (25,6,28).

Затем преобразовал последний столбец (содержащий 0или 1) быть также 3D.Полученный размер был:

test_y (25,6,1) train_y (104,6,1)

после обработки моих данных я использовал одну функцию горячего кодирования на моем Yданные (метки), которые я удалил ранее из исходного набора данных 29 функций.

Проблема возникает, когда я запускаю свою модель для выполнения софтмакс классификации.В нем говорится, что моя вторая плотная сеть должна быть двухмерной, и я передаю трехмерный массив, но мой массив должен быть трехмерным, иначе модель не будет знать, к какому набору данных относятся метки.

Надеюсь, кто-нибудь могПомоги мне.Большое спасибо!

Прочитав несколько статей, мы пришли к выводу, что это может быть тот факт, что некоторые модели с раздвижными окнами предоставляют только 1 категориальную метку на окно, то есть на (временные шаги, функции) выводится только 1 классификацияoutput?

Мой набор данных содержит показания связи TCP / IP, и каждая строка классифицируется как кибератака типа DDOS или как кибератака DDOS.У меня нет 1 окна для каждого случая, чтобы классифицировать весь массив как 1 или 0.

from numpy import mean
from numpy import std
from numpy import dstack
from pandas import read_csv
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers import Dropout
from keras.layers.convolutional import Conv1D
from keras.layers.convolutional import MaxPooling1D
from keras.utils import to_categorical
import numpy as np

f=open('data/data_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[1:625]
train_x=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    train_x[i,:]=values

f=open('data/labels_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[1:625]
train_y=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    train_y[i,:]=values


f=open('data/data_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[626:776]
test_x=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    test_x[i,:]=values


f=open('data/labels_shuffled.csv')
data=f.read()
f.close()
lines=data.split('\n')
header=lines[0].split(',')
lines=lines[626:776]
test_y=np.zeros(((len(lines)),len(header)))
for i, line in enumerate(lines):
    values=[float(x) for x in line.split(',')[0:]]
    test_y[i,:]=values

train_x=train_x.reshape(104,6,28)
train_y=train_y.reshape(104,6,1)
test_x=test_x.reshape(25,6,28)
test_y=test_y.reshape(25,6,1)

train_y=to_categorical(train_y)
test_y=to_categorical(test_y)


print(train_x.shape)
print(test_x.shape)
print(train_y.shape)
print(test_y.shape)


def evaluate_model(train_x, train_y, test_x, test_y):
    verbose, epochs, batch_size = 0, 10, 32
    n_timesteps, n_features, n_outputs = train_x.shape[1],     train_x.shape[2], train_y.shape[2]
    model = Sequential()
    model.add(Conv1D(filters=64, kernel_size=3, activation='relu',
        input_shape=(n_timesteps,n_features)))
    model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
    model.add(Dropout(0.5))
    model.add(MaxPooling1D(pool_size=2))
    model.add(Flatten())
    model.add(Dense(100, activation='relu'))
    model.add(Dense(n_outputs, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam',     metrics=['accuracy'])
# fit network
    model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=verbose)
# evaluate model
    accuracy = model.evaluate(test_x, test_y, batch_size=batch_size, verbose=0)
    return accuracy

valu_model (train_x, train_y, test_x, test_y)

Ожидаемый результат только дляиметь классификатор softmax, который будет предсказывать, относятся ли проверенные данные к атаке или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...