def test_nn(): # 设置初始化参数,采用的是mnist数据集,为28*28的手写数字图像,隐含层100,输出层10代表0~9的数字,学习率初始设为0.2 input_nodes = 28 * 28 hidden_nodes = 100 output_nodes = 10 learning_rate = 0.2 n = nn.NeuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate) # 第一步:开始训练 print("start to train") train = True if train is True: # 训练方法1:用数据训练,采用较小的训练数据集 training_data_list = dataset.get_data_list( "mnist_dataset/mnist_train.csv") count = 0 # 用于打印进度 size = len(training_data_list) # 用于打印进度 for index, record in enumerate(training_data_list): label, inputs = dataset.get_scaled_data(record) targets = numpy.zeros(output_nodes) + 0.01 targets[label] = 0.99 n.train(inputs, targets) # 打印进度 print_process(index, size) # 将最终的权值矩阵保存 numpy.savetxt("w_input_hidden.txt", n.w_input_hidden) numpy.savetxt("w_hidden_output.txt", n.w_hidden_output) else: print("load data done") # 训练方法2:直接导入训练的结果(适用于已经有训练结果,即权值矩阵) n.load("mnist_dataset/w_input_hidden.txt", "mnist_dataset/w_hidden_output.txt") # 第二步:开始测试训练后的神经网络 print("start to test") test_data_list = dataset.get_data_list("mnist_dataset/mnist_test.csv") scorecard = [] # 记分牌,保存每个测试数据的测试结果 right = 0 # 正确总数 size = len(test_data_list) # 用于打印进度 for index, record in enumerate(test_data_list): label, inputs = dataset.get_scaled_data(record) result = n.query(inputs) # 对比神经网络预测结果和标签 if label == result: scorecard.append(1) right += 1 else: scorecard.append(0) # 打印进度 print_process(index, size) # 保存记分牌 numpy.savetxt("scorecard.txt", scorecard) # 打印正确率 print("right rate=", right / len(test_data_list) * 100, "%")
def test_dnn(): layers = [28 * 28, 200, 100, 50, 10] learning_rate = 0.2 dnn = DeepNeuralNetwork(layers, learning_rate) # 开始测试训练 print("start to train") # 训练方法1:用数据训练,采用较小的训练数据集 training_data_list = dataset.get_data_list( "mnist_dataset/mnist_train.csv")[:] # 测试全部数据 size = len(training_data_list) # 用于打印进度 for index, record in enumerate(training_data_list): label, inputs = dataset.get_scaled_data(record) targets = dataset.get_targets_data(layers[-1], label) dnn.layer_train(inputs, targets) # 打印进度 print_process(index, size) # 开始测试 print("start to test") test_data_list = dataset.get_data_list( "mnist_dataset/mnist_test.csv") scorecard = [] # 记分牌,保存每个测试数据的测试结果 right = 0 # 正确总数 size = len(test_data_list) # 用于打印进度 for index, record in enumerate(test_data_list): label, inputs = dataset.get_scaled_data(record) result = dnn.layer_query_result(inputs) # 对比神经网络预测结果和标签 if label == result: scorecard.append(1) right += 1 else: scorecard.append(0) # 打印进度 print_process(index, size) # 打印正确率 print("right rate=", right / len(test_data_list) * 100, "%") pass
def test_kdd_CICIDS(): # 设置初始化参数,采用的是mnist数据集,为28*28的手写数字图像,隐含层100,输出层10代表0~9的数字,学习率初始设为0.2 layers = [78, 40, 2] learning_rate = 0.5 n = DeepNeuralNetwork(layers, learning_rate) # labels_count = [0, 0, 0, 0, 0] # 第一步:开始训练 print("start to train") train = True if train is True: # 训练方法1:用数据训练,采用较小的训练数据集 _, training_data_list = dataset.get_kdd_CICIDS_data( "kdd/Friday-WorkingHours-Afternoon-DDos.pcap_ISCX.csv") training_data_list = random.sample(training_data_list, int(0.1 * len(training_data_list))) # training_data_list = dataset.get_data_list( # "kdd/KDDTest-21-normalization.txt.csv") size = len(training_data_list) # 用于打印进度 for index, record in enumerate(training_data_list): label, inputs = get_kdd_data_CICIDS(record) targets = numpy.zeros(layers[-1]) + 0.01 targets[label] = 0.99 # targets = numpy.zeros(output_nodes) # targets[label] = 1 n.layer_train(inputs, targets) # 打印进度 print_process(index, size) # 统计标签数 # labels_count[label] += 1 else: print("load data done") # 训练方法2:直接导入训练的结果(适用于已经有训练结果,即权值矩阵) n.load("w_input_hidden_kdd.txt", "w_hidden_output_kdd.txt") # 第二步:开始测试训练后的神经网络 print("start to test") _, test_data_list = dataset.get_kdd_CICIDS_data( "kdd/Monday-WorkingHours.pcap_ISCX.csv") test_data_list = random.sample(test_data_list, int(0.1 * len(test_data_list))) # test_data_list = dataset.get_data_list( # "kdd/KDDTrain+_22Percent-normalization.txt.csv") scorecard = [] # 记分牌,保存每个测试数据的测试结果 right = 0 # 正确总数 count = 0 # 用于打印进度 size = len(test_data_list) # 用于打印进度 for index, record in enumerate(test_data_list): label, inputs = get_kdd_data_CICIDS(record) result = n.layer_query_result(inputs) # 对比神经网络预测结果和标签 if label == result: scorecard.append(1) right += 1 else: scorecard.append(0) # 打印进度 print_process(index, size) # print(labels_count) # 打印正确率 print("right rate=", right / len(test_data_list) * 100, "%")