Procházet zdrojové kódy

updated mlp script

Ethan Goldfarb před 6 roky
rodič
revize
53cd6f7664
1 změnil soubory, kde provedl 58 přidání a 29 odebrání
  1. 58 29
      src/classifiers/classifier.py

+ 58 - 29
src/classifiers/classifier.py

@@ -1,14 +1,16 @@
 import tensorflow as tf
 import os
-from sklearn.model_selection import KFold
-import sklearn.linear_model
-import sklearn.metrics
 import keras
 from keras.models import Sequential
 from keras.layers import Dense, Activation
 import numpy as np
 import pandas as pd
 import typing
+import signal
+import heapq
+
+resheap = []
+
 try:
     import sample
 except ImportError:
@@ -20,7 +22,7 @@ except ImportError:
 DEFAULT_FEATURES = ["average_iat", "high.avg_burst_size", "high.burst_count"]
 
 
-def main(options: list):
+def main(options: list, hparams: tuple):
     args = parse_args(options)
     try:
         import cPickle as pickle
@@ -50,30 +52,25 @@ def main(options: list):
     labelsshuffled = trainingdf['0_x']
     datashuffled = trainingdf.drop(['0_x'], axis=1)
 
-    classify(num_users, datashuffled.to_numpy()[:-20], labelsshuffled.to_numpy()[:-20], datashuffled.to_numpy()[-20:], labelsshuffled.to_numpy()[-20:])
-    '''if args.graph_top:
-        graph_top(args, data[s], labels[s])
-    if args.graph_k:
-        graph_k(args, data[s], labels[s])
-    if args.graph_weights:
-        graph_w(args, data[s], labels[s])
-    res, matrix = kNearestNeighbors(data[s], labels[s], n=args.folds,
-                                    verbose=args.verbose, guesses=args.top,
-                                    k=args.k_neighbors, weights=args.weight)'''
-    #print("Overall Accuracy: %f" % np.average(res))
-    #if args.p_value:
-     #   print("P-Value: %f" % t_test(res, num_users)[1] / 2)
-    #if args.graph:
-    #    gen_confusion_matrix(matrix, labels)
-
-
-def classify(classifications: int, sampleData: list, labels: list, testdata: list, testlabels: list):
+    tempr = []
+    for i in range(5):
+        tempr.append(classify(num_users, datashuffled.to_numpy()[:-20], labelsshuffled.to_numpy()[:-20],
+                        datashuffled.to_numpy()[-20:], labelsshuffled.to_numpy()[-20:], hparams[0], hparams[1]))
+    acc = 0
+    for z in tempr:
+        acc += z[1]
+    acc = acc / 5
+    return acc
+
+
+def classify(classifications: int, sampleData: list, labels: list, testdata: list, testlabels: list, activ: str, hiddenlayers: int):
     #print(classifications)
     model = Sequential()
     model.add(Dense(len(sampleData[0]), input_dim=len(sampleData[0])))
-    model.add(Activation('sigmoid'))
-    model.add(Dense(len(sampleData[0])//2))
-    model.add(Activation('sigmoid'))
+    model.add(Activation(activ))
+    for i in range(hiddenlayers):
+        model.add(Dense(len(sampleData[0])//2))
+        model.add(Activation(activ))
     model.add(Dense(classifications))
     model.add(Activation('relu'))
     model.compile(optimizer='rmsprop',
@@ -84,6 +81,7 @@ def classify(classifications: int, sampleData: list, labels: list, testdata: lis
     one_hot_test_labels = keras.utils.to_categorical(testlabels, num_classes=classifications)
     results = model.evaluate(testdata, one_hot_test_labels, batch_size=128)
     print(results)
+    return results
 
 
 
@@ -140,12 +138,43 @@ def parse_args(args: list):
     return parser.parse_args(args)
 
 
+def receiveSignal(signalNumber, frame):
+    print('Received:', signalNumber)
+    f = open("interrupt.txt", 'w+')
+    for item in resheap:
+        f.write(str(item))
+    f.close()
+    return
+
+
 if __name__ == '__main__':
     import sys
 
+    signal.signal(signal.SIGHUP, receiveSignal)
+    signal.signal(signal.SIGINT, receiveSignal)
+    signal.signal(signal.SIGQUIT, receiveSignal)
+    signal.signal(signal.SIGILL, receiveSignal)
+    signal.signal(signal.SIGTRAP, receiveSignal)
+    signal.signal(signal.SIGABRT, receiveSignal)
+    signal.signal(signal.SIGBUS, receiveSignal)
+    signal.signal(signal.SIGFPE, receiveSignal)
+
+    params = [('sigmoid', 1), ('relu', 1), ('sigmoid', 2), ('relu', 2), ('exponential', 1), ('exponential', 2)]
+    outputcounter = 0
+
     for filename in os.listdir('./samples2.0'):
         print(os.path.join('./samples2.0', filename))
-        main(["-f*", os.path.join('./samples2.0', filename)])
-        #main(sys.argv[1:])
-    #print(sys.argv[1:])
-    #main(sys.argv[1:])
+        if outputcounter > 10:
+            f = open("tempresults.txt", 'w+')
+            for item in resheap:
+                f.write(str(item))
+            f.close()
+            outputcounter = 0
+        for p in params:
+            temp = main(["-f*", os.path.join('./samples2.0', filename)], p)
+            print("temp: " + str(temp))
+            print(resheap)
+            heapq.heappush(resheap, [temp, filename, p])
+            if len(resheap) > 100:
+                heapq.heappop(resheap)
+            outputcounter += 1