| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- import numpy as np
- from tensorflow.keras.models import load_model
- from Data.Preprocess import get_data
- from GenerateAbnormalData import generate_abnormal_data
- from IDS.CNN.CNNetwork import run_cnn_network, evaluate_cnn_network
- from Network.BiGAN.RunBiGanNetwork import run_bigan
- from Network.GAN.RunNetwork import run_network
- def get_ids_train_data():
- data = get_data('train')
- _train_data = data['all'][0]
- _train_label = data['all'][1]
- labels = ['label-dos', 'label-normal', 'label-probe', 'label-r2l', 'label-u2r']
- for label in ['normal', 'u2r', 'r2l', 'probe', 'dos']:
- print('[-]' + label + '数据量为:' + str(data[label][0].shape[0]))
- while True:
- model_name = input('[-]请输入生成器模型名称(输入go开始训练IDS):')
- if model_name == 'go':
- break
- label_name = input('[-]请输入生成器数据类型(dos,normal,probe,r2l,u2r):')
- try:
- generator = load_model('Models/Gan/' + model_name + '.h5')
- except Exception as e:
- print('[-]没有此模型,名字输错啦')
- num = int(input('[-]请输入生成数据量:'))
- fake_abnormal_data_x = generate_abnormal_data(generator, num)
- _train_data = np.append(_train_data, fake_abnormal_data_x, axis=0)
- fake_abnormal_data_y = np.zeros((fake_abnormal_data_x.shape[0], 5))
- for i in range(5):
- if labels[i].endswith(label_name):
- fake_abnormal_data_y[::, i] = 1
- _train_label = np.append(_train_label, fake_abnormal_data_y, axis=0)
- return _train_data, _train_label
- def train_gan():
- type_of_gan = input('[-]请输入神经网络模型类型( ① GAN ② BIGAN ):')
- model_name = input('[-]请输入模型名称:')
- data_class = input('[-]请输入需要生成的数据:')
- data = get_data('train')[data_class]
- epochs = int(input('[-]请输入训练次数:'))
- if int(type_of_gan) == 1:
- generator = run_network(data[0], data[1], epochs)
- generator.save('Models/Gan/' + 'gan_' + model_name + '_' + data_class + '.h5')
- elif int(type_of_gan) == 2:
- generator = run_bigan(data[0], data[1], epochs)
- generator.save('Models/Gan/' + 'bigan_' + model_name + '_' + data_class + '.h5')
- def train_ids_without_gan():
- model_name = input('[-]请输入模型名称:')
- data = get_data('train')['all']
- epochs = int(input('[-]请输入训练次数:'))
- cnn = run_cnn_network(data[0], data[1], epochs)
- cnn.save('Models/IDS/' + model_name + '.h5')
- def train_ids_with_gan():
- train_data, train_label = get_ids_train_data()
- model_name = input('[-]请输入IDS模型名称:')
- epochs = int(input('[-]请输入训练次数:'))
- cnn = run_cnn_network(train_data, train_label, epochs)
- cnn.save('Models/IDS/' + model_name + '.h5')
- def load_and_test_ids():
- model_name = input('[-]请输入IDS模型名称:')
- cnn = load_model('Models/IDS/' + model_name + '.h5')
- data = get_data('test')
- losses = []
- accuracies = []
- flags = []
- while True:
- opt_flag = input('[-]请输入需要测试的样本集(all,normal,u2r,r2l,probe):')
- flags.append(opt_flag)
- try:
- loss, accuracy = evaluate_cnn_network(cnn, data[opt_flag][0], data[opt_flag][1], 'KDD' + opt_flag)
- losses.append(loss)
- accuracies.append(accuracy)
- for i in range(len(losses)):
- print('[-]( 测试集: KDD-' + flags[i] + ' ) 测试损失为:' + str(losses[i]) + ' 准确度为:' + str(accuracies[i]))
- except KeyError as e:
- break
- def main():
- flag = input('[-]请输入操作( ① GAN模型 ② IDS模型 ):')
- if int(flag) == 1:
- train_gan()
- elif int(flag) == 2:
- flag_for_ids = input('[-] ① 单独训练IDS模型 ② 使用GAN生成数据并训练IDS模型 ③ 加载并测试IDS模型 :')
- if int(flag_for_ids) == 1:
- train_ids_without_gan()
- elif int(flag_for_ids) == 2:
- train_ids_with_gan()
- elif int(flag_for_ids) == 3:
- load_and_test_ids()
- if __name__ == '__main__':
- main()
|