Read Data Sample


In [1]:
import pandas as pd
import numpy as np
import os
from collections import namedtuple
pd.set_option("display.max_rows",100)
%matplotlib inline

In [2]:
%%bash
rm dataset/scores/tf_vae_only_nsl_kdd_all-.pkl


rm: cannot remove 'dataset/tf_vae_only_nsl_kdd_all-.pkl': No such file or directory

In [3]:
class dataset:
    kdd_train_2labels = pd.read_pickle("dataset/kdd_train__2labels.pkl")
    kdd_test_2labels = pd.read_pickle("dataset/kdd_test_2labels.pkl")
    kdd_test__2labels = pd.read_pickle("dataset/kdd_test__2labels.pkl")
    
    kdd_train_5labels = pd.read_pickle("dataset/kdd_train_5labels.pkl")
    kdd_test_5labels = pd.read_pickle("dataset/kdd_test_5labels.pkl")

In [4]:
dataset.kdd_train_2labels.shape


Out[4]:
(25192, 124)

In [5]:
dataset.kdd_test_2labels.shape


Out[5]:
(22544, 124)

In [6]:
from sklearn import model_selection as ms
from sklearn import preprocessing as pp

class preprocess:
    
    output_columns_2labels = ['is_Normal','is_Attack']
    
    x_input = dataset.kdd_train_2labels.drop(output_columns_2labels, axis = 1)
    y_output = dataset.kdd_train_2labels.loc[:,output_columns_2labels]

    x_test_input = dataset.kdd_test_2labels.drop(output_columns_2labels, axis = 1)
    y_test = dataset.kdd_test_2labels.loc[:,output_columns_2labels]

    x_test__input = dataset.kdd_test__2labels.drop(output_columns_2labels, axis = 1)
    y_test_ = dataset.kdd_test__2labels.loc[:,output_columns_2labels]
    
    ss = pp.StandardScaler()

    x_train = ss.fit_transform(x_input)
    x_test = ss.transform(x_test_input)
    x_test_ = ss.transform(x_test__input)

    y_train = y_output.values
    y_test = y_test.values
    y_test_ = y_test_.values

    x_train = np.hstack((x_train, y_train))
    x_test = np.hstack((x_test, np.random.normal(size = (x_test.shape[0], y_train.shape[1]))))
    x_test_ = np.hstack((x_test_, np.random.normal(size = (x_test_.shape[0], y_train.shape[1]))))

    #x_test = np.hstack((x_test, y_test))
    
preprocess.x_train.std()


Out[6]:
0.97133071128034443

In [7]:
import tensorflow as tf

In [8]:
class network(object):
    
    input_dim = 124
    classes = 2
    hidden_encoder_dim = 124
    hidden_layers = 1
    latent_dim = 10

    hidden_decoder_dim = 124
    lam = 0.01
    
    def __init__(self, classes, hidden_layers, num_of_features):
        self.classes = classes
        self.hidden_layers = hidden_layers
        self.latent_dim = num_of_features
            
    def build_layers(self):
        tf.reset_default_graph()
        #learning_rate = tf.Variable(initial_value=0.001)

        input_dim = self.input_dim
        classes = self.classes
        hidden_encoder_dim = self.hidden_encoder_dim
        hidden_layers = self.hidden_layers
        latent_dim = self.latent_dim
        hidden_decoder_dim = self.hidden_decoder_dim
        lam = self.lam
        
        with tf.variable_scope("Input"):
            self.x = tf.placeholder("float", shape=[None, input_dim])
            self.y_ = tf.placeholder("float", shape=[None, classes])
            self.keep_prob = tf.placeholder("float")
            self.lr = tf.placeholder("float")
        
        with tf.variable_scope("Layer_Encoder"):

            hidden_encoder = tf.layers.dense(self.x, hidden_encoder_dim, activation = tf.nn.relu, kernel_regularizer=tf.nn.l2_loss)
            hidden_encoder = tf.nn.dropout(hidden_encoder, self.keep_prob)
            for h in range(hidden_layers - 1):
                hidden_encoder = tf.layers.dense(hidden_encoder, hidden_encoder_dim, activation = tf.nn.relu, kernel_regularizer=tf.nn.l2_loss)
                hidden_encoder = tf.nn.dropout(hidden_encoder, self.keep_prob)
                
        with tf.variable_scope("Layer_Mean"):
            mu_encoder = tf.layers.dense(hidden_encoder, latent_dim, activation = None, kernel_regularizer=tf.nn.l2_loss)

        with tf.variable_scope("Layer_Variance"):
            logvar_encoder = tf.layers.dense(hidden_encoder, latent_dim, activation = None, kernel_regularizer=tf.nn.l2_loss)

        with tf.variable_scope("Sampling_Distribution"):
            # Sample epsilon
            epsilon = tf.random_normal(tf.shape(logvar_encoder), mean=0, stddev=1, name='epsilon')

            # Sample latent variable
            std_encoder = tf.exp(0.5 * logvar_encoder)
            z = mu_encoder + tf.multiply(std_encoder, epsilon)
            
            #tf.summary.histogram("Sample_Distribution", z)

        with tf.variable_scope("Layer_Decoder"):
            hidden_decoder = tf.layers.dense(z, hidden_decoder_dim, activation = tf.nn.relu, kernel_regularizer=tf.nn.l2_loss)
            hidden_decoder = tf.nn.dropout(hidden_decoder, self.keep_prob)
            for h in range(hidden_layers - 1):
                hidden_decoder = tf.layers.dense(hidden_decoder, hidden_decoder_dim, activation = tf.nn.relu, kernel_regularizer=tf.nn.l2_loss)
                hidden_decoder = tf.nn.dropout(hidden_decoder, self.keep_prob)
                
        with tf.variable_scope("Layer_Reconstruction"):
            self.x_hat = tf.layers.dense(hidden_decoder, input_dim, activation = None)
            
            self.y = tf.slice(self.x_hat, [0,input_dim-2], [-1,-1])

        with tf.variable_scope("Loss"):
            
            BCE = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=self.x_hat, labels=self.x), reduction_indices=1)
            KLD = -0.5 * tf.reduce_mean(1 + logvar_encoder - tf.pow(mu_encoder, 2) - tf.exp(logvar_encoder), reduction_indices=1)
            softmax_loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = self.y_, logits = self.y))

            loss = tf.reduce_mean((BCE + KLD + softmax_loss) * lam)
            
            loss = tf.clip_by_value(loss, -1e-4, 1e-4)
            loss = tf.where(tf.is_nan(loss), 1e-4, loss)
            loss = tf.where(tf.equal(loss, -1e-4), tf.random_normal(loss.shape), loss)
            loss = tf.where(tf.equal(loss, 1e-4), tf.random_normal(loss.shape), loss)
            
            self.regularized_loss = loss
            
            correct_prediction = tf.equal(tf.argmax(self.y, 1), tf.argmax(self.y_, 1))
            self.tf_accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32), name = "Accuracy")

        with tf.variable_scope("Optimizer"):
            learning_rate= self.lr #1e-2
            optimizer = tf.train.AdamOptimizer(learning_rate)
            gradients, variables = zip(*optimizer.compute_gradients(self.regularized_loss))
            gradients = [
                None if gradient is None else tf.clip_by_value(gradient, -1, 1)
                for gradient in gradients]
            self.train_op = optimizer.apply_gradients(zip(gradients, variables))
            #self.train_op = optimizer.minimize(self.regularized_loss)
            
        # add op for merging summary
        #self.summary_op = tf.summary.merge_all()
        self.pred = tf.argmax(self.y, axis = 1)
        self.actual = tf.argmax(self.y_, axis = 1)

        # add Saver ops
        self.saver = tf.train.Saver()

In [9]:
import collections
import time
import sklearn.metrics as me 


class Train:    
    
    result = namedtuple("score", ['epoch', 'no_of_features','hidden_layers','train_score', 'test_score', 'f1_score', 'test_score_20', 'f1_score_20', 'time_taken'])

    predictions = {}
    predictions_ = {}

    results = []
    best_acc = 0
    best_acc_global = 0
    
    def train(epochs, net, h, f, lrs):
        batch_iterations = 200
        train_loss = None
        Train.best_acc = 0
        os.makedirs("dataset/tf_vae_only_nsl_kdd-/hidden layers_{}_features count_{}".format(epochs,h,f),
                    exist_ok = True)
        with tf.Session() as sess:
            #summary_writer_train = tf.summary.FileWriter('./logs/kdd/VAE/training', graph=sess.graph)
            #summary_writer_valid = tf.summary.FileWriter('./logs/kdd/VAE/validation')

            sess.run(tf.global_variables_initializer())
            start_time = time.perf_counter()
            for c, lr in enumerate(lrs):
                for epoch in range(1, (epochs+1)):
                    #print("Step {} | Training Loss:".format(epoch), end = " " )
                    x_train, x_valid, y_train, y_valid, = ms.train_test_split(preprocess.x_train, 
                                                                              preprocess.y_train, 
                                                                              test_size=0.1)
                    batch_indices = np.array_split(np.arange(x_train.shape[0]), 
                                               batch_iterations)

                    for i in batch_indices:

                        def train_batch():
                            nonlocal train_loss
                            _, train_loss = sess.run([net.train_op, 
                                                      net.regularized_loss, 
                                                      ], #net.summary_op
                                                      feed_dict={net.x: x_train[i,:], 
                                                                 net.y_: y_train[i,:], 
                                                                 net.keep_prob:1, net.lr:lr})

                        train_batch()

                        count = 10
                        if((train_loss > 1e9 or np.isnan(train_loss) ) and epoch > 1 and count > 1):
                            print("Step {} | High Training Loss: {:.6f} ... Restoring Net".format(epoch, train_loss))
                            net.saver.restore(sess, 
                                              tf.train.latest_checkpoint('dataset/tf_vae_only_nsl_kdd-/hidden layers_{}_features count_{}'
                                                                         .format(epochs,h,f)))
                            train_batch()
                            count -= 1

                        #summary_writer_train.add_summary(summary_str, epoch)
                        #if(train_loss > 1e9):

                        #print("{:.6f}".format(train_loss), end = ", " )

                    #print("")
                    valid_loss, valid_accuracy = sess.run([net.regularized_loss, net.tf_accuracy], feed_dict={net.x: x_valid, 
                                                                         net.y_: y_valid, 
                                                                         net.keep_prob:1, net.lr:lr})


                    accuracy, test_loss, pred_value, actual_value, y_pred = sess.run([net.tf_accuracy, net.regularized_loss, 
                                                                   net.pred, 
                                                                   net.actual, net.y], 
                                                                  feed_dict={net.x: preprocess.x_test, 
                                                                             net.y_: preprocess.y_test, 
                                                                             net.keep_prob:1, net.lr:lr})
                    f1_score = me.f1_score(actual_value, pred_value)
                    accuracy_, test_loss_, pred_value_, actual_value_, y_pred_ = sess.run([net.tf_accuracy, net.regularized_loss, 
                                                                                           net.pred, 
                                                                                           net.actual, net.y], 
                                                                                          feed_dict={net.x: preprocess.x_test_, 
                                                                                                     net.y_: preprocess.y_test_, 
                                                                                                     net.keep_prob:1, net.lr:lr})
                    f1_score_ = me.f1_score(actual_value_, pred_value_)
                    #print("*************** \n")
                    print("Step {} | Training Loss: {:.6f} | Validation Accuracy: {:.6f}".format(epoch, train_loss, valid_accuracy))
                    print("Accuracy on Test data: {}, {}".format(accuracy, accuracy_))
                    #print("*************** \n")
                    #print("Accuracy on Test data: {}".format(accuracy))


                    if accuracy > Train.best_acc_global:
                        Train.best_acc_global = accuracy
                        Train.pred_value = pred_value
                        Train.actual_value = actual_value
                        Train.pred_value_ = pred_value_
                        Train.actual_value_ = actual_value_
                        Train.best_parameters = "Hidden Layers:{}, Features Count:{}".format(h, f)

                    if accuracy > Train.best_acc:

                        #net.saver.save(sess, "dataset/tf_vae_only_nsl_kdd_hidden layers_{}_features count_{}".format(epochs,h,f))
                        #Train.results.append(Train.result(epochs, f, h,valid_accuracy, accuracy))
                        #curr_pred = pd.DataFrame({"Attack_prob":y_pred[:,-2], "Normal_prob":y_pred[:, -1]})
                        #Train.predictions.update({"{}_{}_{}".format(epochs,f,h):curr_pred})

                        Train.best_acc = accuracy
                        if not (np.isnan(train_loss)):
                            net.saver.save(sess, 
                                       "dataset/tf_vae_only_nsl_kdd-/hidden layers_{}_features count_{}/model"
                                       .format(epochs,h,f), 
                                       global_step = epoch, 
                                       write_meta_graph=False)

                        curr_pred = pd.DataFrame({"Attack_prob":y_pred[:,-2], "Normal_prob":y_pred[:, -1], "Prediction":pred_value, "Actual":actual_value})
                        curr_pred_ = pd.DataFrame({"Attack_prob":y_pred_[:,-2], "Normal_prob":y_pred_[:, -1], "Prediction":pred_value_, "Actual": actual_value_})
                        
                        Train.predictions.update({"{}_{}_{}".format((epoch+1)*(c+1),f,h):(curr_pred, 
                                                   Train.result((epoch+1)*(c+1), f, h, valid_accuracy, accuracy, f1_score, accuracy_, f1_score_, time.perf_counter() - start_time))})
                        Train.predictions_.update({"{}_{}_{}".format((epoch+1)*(c+1),f,h):(curr_pred_, 
                                                   Train.result((epoch+1)*(c+1), f, h, valid_accuracy, accuracy, f1_score, accuracy_, f1_score_, time.perf_counter() - start_time))})

In [10]:
import itertools
class Hyperparameters:
#    features_arr = [2, 4, 8, 16, 32, 64, 128, 256]
#    hidden_layers_arr = [2, 4, 6, 10]



    def start_training():

        global df_results
        global past_scores
        
        Train.predictions = {}
        Train.predictions_ = {}

        Train.results = []
        
        features_arr = [1, 12, 24, 48, 122]
        hidden_layers_arr = [1, 3]

        epochs = [15]
        lrs = [1e-2, 1e-2, 1e-3]

        print("********************************** Entering Loop ******************************")

        for e, h, f in itertools.product(epochs, hidden_layers_arr, features_arr):
            print("Current Layer Attributes - epochs:{} hidden layers:{} features count:{}".format(e,h,f))
            n = network(2,h,f)
            n.build_layers()
            Train.train(e, n, h,f, lrs)
            
        dict1 = {}
        dict1_ = {}
        dict2 = []

        for k, (v1, v2) in Train.predictions.items():
            dict1.update({k: v1})
            dict2.append(v2)

        for k, (v1_, v2) in Train.predictions_.items():
            dict1_.update({k: v1_})

        Train.predictions = dict1
        Train.predictions_ = dict1_
        
        Train.results = dict2
        df_results = pd.DataFrame(Train.results)

        if not os.path.isfile('dataset/scores/tf_vae_only_nsl_kdd_all-.pkl'):
            past_scores = df_results
        else:
            past_scores = pd.read_pickle("dataset/scores/tf_vae_only_nsl_kdd_all-.pkl")
            past_scores = past_scores.append(df_results, ignore_index=True)
            
        past_scores.to_pickle("dataset/scores/tf_vae_only_nsl_kdd_all-.pkl")

In [11]:
#%%timeit -r 10

Hyperparameters.start_training()


********************************** Entering Loop ******************************
Current Layer Attributes - epochs:15 hidden layers:1 features count:1
/home/ritesh_malaiya/anaconda3/envs/p3/lib/python3.6/site-packages/sklearn/metrics/classification.py:1113: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples.
  'precision', 'predicted', average, warn_for)
Step 1 | Training Loss: 0.323836 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 2 | Training Loss: 0.691829 | Validation Accuracy: 0.548016
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 3 | Training Loss: -0.754257 | Validation Accuracy: 0.530952
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 4 | Training Loss: 0.547523 | Validation Accuracy: 0.550794
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 5 | Training Loss: -0.000786 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 6 | Training Loss: 0.035695 | Validation Accuracy: 0.537698
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 7 | Training Loss: 0.318277 | Validation Accuracy: 0.544048
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 8 | Training Loss: -0.512744 | Validation Accuracy: 0.521429
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 9 | Training Loss: 1.305139 | Validation Accuracy: 0.522619
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 10 | Training Loss: 0.481198 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 11 | Training Loss: -0.231506 | Validation Accuracy: 0.526587
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 12 | Training Loss: -0.704337 | Validation Accuracy: 0.532937
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 13 | Training Loss: 0.241507 | Validation Accuracy: 0.534921
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 14 | Training Loss: -0.778782 | Validation Accuracy: 0.536905
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 15 | Training Loss: 1.412460 | Validation Accuracy: 0.552778
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 1 | Training Loss: 0.306618 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 2 | Training Loss: -0.742113 | Validation Accuracy: 0.532540
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 3 | Training Loss: 1.579602 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 4 | Training Loss: 0.687746 | Validation Accuracy: 0.536111
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 5 | Training Loss: 0.245421 | Validation Accuracy: 0.546429
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 6 | Training Loss: 1.246377 | Validation Accuracy: 0.546429
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 7 | Training Loss: 0.256240 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 8 | Training Loss: -0.629047 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 9 | Training Loss: 0.323759 | Validation Accuracy: 0.538889
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 10 | Training Loss: 1.254614 | Validation Accuracy: 0.536111
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 11 | Training Loss: 0.711429 | Validation Accuracy: 0.550794
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 12 | Training Loss: -1.406902 | Validation Accuracy: 0.542063
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 13 | Training Loss: 1.117682 | Validation Accuracy: 0.542857
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 14 | Training Loss: -1.544911 | Validation Accuracy: 0.523413
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 15 | Training Loss: 0.411465 | Validation Accuracy: 0.535317
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 1 | Training Loss: -0.313428 | Validation Accuracy: 0.532937
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 2 | Training Loss: 1.936397 | Validation Accuracy: 0.537698
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 3 | Training Loss: 0.406893 | Validation Accuracy: 0.541270
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 4 | Training Loss: 1.811579 | Validation Accuracy: 0.530952
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 5 | Training Loss: -0.096351 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 6 | Training Loss: 1.226899 | Validation Accuracy: 0.511508
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 7 | Training Loss: -1.649435 | Validation Accuracy: 0.530952
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 8 | Training Loss: -0.887878 | Validation Accuracy: 0.522619
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 9 | Training Loss: -0.136309 | Validation Accuracy: 0.540873
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 10 | Training Loss: 1.117020 | Validation Accuracy: 0.554762
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 11 | Training Loss: -0.070521 | Validation Accuracy: 0.523810
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 12 | Training Loss: -0.595402 | Validation Accuracy: 0.526190
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 13 | Training Loss: 1.016807 | Validation Accuracy: 0.545635
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 14 | Training Loss: 0.528737 | Validation Accuracy: 0.528175
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 15 | Training Loss: -1.676362 | Validation Accuracy: 0.532540
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Current Layer Attributes - epochs:15 hidden layers:1 features count:12
Step 1 | Training Loss: -0.402321 | Validation Accuracy: 0.518651
Accuracy on Test data: 0.43927431106567383, 0.324894517660141
Step 2 | Training Loss: 1.031781 | Validation Accuracy: 0.495238
Accuracy on Test data: 0.43980661034584045, 0.32455697655677795
Step 3 | Training Loss: -0.662190 | Validation Accuracy: 0.508730
Accuracy on Test data: 0.43829843401908875, 0.3199999928474426
Step 4 | Training Loss: 0.153042 | Validation Accuracy: 0.508333
Accuracy on Test data: 0.4409599006175995, 0.32295358180999756
Step 5 | Training Loss: 2.254114 | Validation Accuracy: 0.511508
Accuracy on Test data: 0.43577003479003906, 0.32194092869758606
Step 6 | Training Loss: -0.134715 | Validation Accuracy: 0.513889
Accuracy on Test data: 0.4418914020061493, 0.322025328874588
Step 7 | Training Loss: 0.152103 | Validation Accuracy: 0.519444
Accuracy on Test data: 0.4402945339679718, 0.3297046422958374
Step 8 | Training Loss: 1.013059 | Validation Accuracy: 0.525397
Accuracy on Test data: 0.43545955419540405, 0.3145991563796997
Step 9 | Training Loss: -2.508973 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.438342809677124, 0.323713093996048
Step 10 | Training Loss: 1.131800 | Validation Accuracy: 0.507937
Accuracy on Test data: 0.44224628806114197, 0.32675105333328247
Step 11 | Training Loss: 0.233715 | Validation Accuracy: 0.517460
Accuracy on Test data: 0.43989530205726624, 0.31654009222984314
Step 12 | Training Loss: -0.499647 | Validation Accuracy: 0.494048
Accuracy on Test data: 0.43545955419540405, 0.324050635099411
Step 13 | Training Loss: -1.129073 | Validation Accuracy: 0.531349
Accuracy on Test data: 0.43763306736946106, 0.3263291120529175
Step 14 | Training Loss: -1.605130 | Validation Accuracy: 0.525000
Accuracy on Test data: 0.442379355430603, 0.33198311924934387
Step 15 | Training Loss: -2.571621 | Validation Accuracy: 0.521825
Accuracy on Test data: 0.4369233548641205, 0.323713093996048
Step 1 | Training Loss: -0.765491 | Validation Accuracy: 0.519048
Accuracy on Test data: 0.4384315013885498, 0.32337552309036255
Step 2 | Training Loss: 0.588719 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.4384315013885498, 0.3202531635761261
Step 3 | Training Loss: 0.858557 | Validation Accuracy: 0.526190
Accuracy on Test data: 0.4356813430786133, 0.3231223523616791
Step 4 | Training Loss: -1.163308 | Validation Accuracy: 0.519444
Accuracy on Test data: 0.436479777097702, 0.3259071707725525
Step 5 | Training Loss: -0.501946 | Validation Accuracy: 0.503571
Accuracy on Test data: 0.4394517242908478, 0.3272573947906494
Step 6 | Training Loss: -0.466201 | Validation Accuracy: 0.516270
Accuracy on Test data: 0.4415809214115143, 0.323713093996048
Step 7 | Training Loss: 0.495949 | Validation Accuracy: 0.503571
Accuracy on Test data: 0.4413147568702698, 0.3299578130245209
Step 8 | Training Loss: 1.234320 | Validation Accuracy: 0.520238
Accuracy on Test data: 0.43741127848625183, 0.3302953541278839
Step 9 | Training Loss: 0.613170 | Validation Accuracy: 0.496429
Accuracy on Test data: 0.441536545753479, 0.324894517660141
Step 10 | Training Loss: -1.264403 | Validation Accuracy: 0.514286
Accuracy on Test data: 0.44140347838401794, 0.3218565285205841
Step 11 | Training Loss: 0.384534 | Validation Accuracy: 0.508333
Accuracy on Test data: 0.436479777097702, 0.3333333432674408
Step 12 | Training Loss: 0.723307 | Validation Accuracy: 0.497619
Accuracy on Test data: 0.44512951374053955, 0.32092827558517456
Step 13 | Training Loss: -2.145337 | Validation Accuracy: 0.498810
Accuracy on Test data: 0.432620644569397, 0.31409281492233276
Step 14 | Training Loss: 0.302916 | Validation Accuracy: 0.508730
Accuracy on Test data: 0.44047197699546814, 0.32295358180999756
Step 15 | Training Loss: 0.192366 | Validation Accuracy: 0.505556
Accuracy on Test data: 0.44233497977256775, 0.323713093996048
Step 1 | Training Loss: -0.610899 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.4387863874435425, 0.31949368119239807
Step 2 | Training Loss: 1.165902 | Validation Accuracy: 0.526587
Accuracy on Test data: 0.4390081763267517, 0.3278481066226959
Step 3 | Training Loss: 0.234147 | Validation Accuracy: 0.515873
Accuracy on Test data: 0.4399396777153015, 0.32194092869758606
Step 4 | Training Loss: -0.587893 | Validation Accuracy: 0.503571
Accuracy on Test data: 0.43581441044807434, 0.32151898741722107
Step 5 | Training Loss: 1.150877 | Validation Accuracy: 0.520238
Accuracy on Test data: 0.4411816895008087, 0.32573840022087097
Step 6 | Training Loss: -2.003144 | Validation Accuracy: 0.520238
Accuracy on Test data: 0.44109296798706055, 0.32776370644569397
Step 7 | Training Loss: 0.802351 | Validation Accuracy: 0.527381
Accuracy on Test data: 0.4422019124031067, 0.32801687717437744
Step 8 | Training Loss: 2.079521 | Validation Accuracy: 0.505952
Accuracy on Test data: 0.43891945481300354, 0.32396623492240906
Step 9 | Training Loss: 0.675069 | Validation Accuracy: 0.514286
Accuracy on Test data: 0.4365241229534149, 0.3231223523616791
Step 10 | Training Loss: -2.072013 | Validation Accuracy: 0.499206
Accuracy on Test data: 0.4390081763267517, 0.32075950503349304
Step 11 | Training Loss: -0.160000 | Validation Accuracy: 0.509524
Accuracy on Test data: 0.4406493902206421, 0.322447270154953
Step 12 | Training Loss: -0.559168 | Validation Accuracy: 0.505159
Accuracy on Test data: 0.4355926215648651, 0.32320675253868103
Step 13 | Training Loss: 0.609659 | Validation Accuracy: 0.529762
Accuracy on Test data: 0.43674591183662415, 0.33400842547416687
Step 14 | Training Loss: -0.921139 | Validation Accuracy: 0.509127
Accuracy on Test data: 0.4353708326816559, 0.3199999928474426
Step 15 | Training Loss: 1.051159 | Validation Accuracy: 0.509127
Accuracy on Test data: 0.4371451437473297, 0.32118144631385803
Current Layer Attributes - epochs:15 hidden layers:1 features count:24
Step 1 | Training Loss: 0.916064 | Validation Accuracy: 0.422222
Accuracy on Test data: 0.4925035536289215, 0.6606751084327698
Step 2 | Training Loss: -0.472402 | Validation Accuracy: 0.404762
Accuracy on Test data: 0.49121716618537903, 0.654177188873291
Step 3 | Training Loss: -1.453709 | Validation Accuracy: 0.405159
Accuracy on Test data: 0.4938342869281769, 0.648101270198822
Step 4 | Training Loss: -1.390249 | Validation Accuracy: 0.417460
Accuracy on Test data: 0.49112847447395325, 0.6563712954521179
Step 5 | Training Loss: -1.187219 | Validation Accuracy: 0.415476
Accuracy on Test data: 0.49050745368003845, 0.6574683785438538
Step 6 | Training Loss: -1.796881 | Validation Accuracy: 0.412302
Accuracy on Test data: 0.4887331426143646, 0.6597468256950378
Step 7 | Training Loss: 0.205875 | Validation Accuracy: 0.424603
Accuracy on Test data: 0.4977821111679077, 0.6610126495361328
Step 8 | Training Loss: -0.277252 | Validation Accuracy: 0.419841
Accuracy on Test data: 0.4916607439517975, 0.6540084481239319
Step 9 | Training Loss: 1.011940 | Validation Accuracy: 0.423810
Accuracy on Test data: 0.48895493149757385, 0.652911365032196
Step 10 | Training Loss: -0.639872 | Validation Accuracy: 0.421825
Accuracy on Test data: 0.49698367714881897, 0.6563712954521179
Step 11 | Training Loss: -0.723823 | Validation Accuracy: 0.416667
Accuracy on Test data: 0.49174946546554565, 0.6573839783668518
Step 12 | Training Loss: -0.071671 | Validation Accuracy: 0.401190
Accuracy on Test data: 0.4978708326816559, 0.6535865068435669
Step 13 | Training Loss: -0.486101 | Validation Accuracy: 0.408730
Accuracy on Test data: 0.4922817647457123, 0.6557806134223938
Step 14 | Training Loss: -0.112014 | Validation Accuracy: 0.414683
Accuracy on Test data: 0.4929027557373047, 0.6560337543487549
Step 15 | Training Loss: -0.291639 | Validation Accuracy: 0.408730
Accuracy on Test data: 0.4950319230556488, 0.6540084481239319
Step 1 | Training Loss: -2.221437 | Validation Accuracy: 0.406349
Accuracy on Test data: 0.49024131894111633, 0.656286895275116
Step 2 | Training Loss: 0.859794 | Validation Accuracy: 0.401587
Accuracy on Test data: 0.495120644569397, 0.6565400958061218
Step 3 | Training Loss: 0.571015 | Validation Accuracy: 0.425000
Accuracy on Test data: 0.4901082217693329, 0.6616877913475037
Step 4 | Training Loss: -0.291962 | Validation Accuracy: 0.412302
Accuracy on Test data: 0.4935237765312195, 0.654683530330658
Step 5 | Training Loss: -0.322103 | Validation Accuracy: 0.402778
Accuracy on Test data: 0.4941447973251343, 0.6582278609275818
Step 6 | Training Loss: -1.052508 | Validation Accuracy: 0.405159
Accuracy on Test data: 0.49170511960983276, 0.6600843667984009
Step 7 | Training Loss: 1.132748 | Validation Accuracy: 0.413492
Accuracy on Test data: 0.49086230993270874, 0.6655696034431458
Step 8 | Training Loss: 1.793616 | Validation Accuracy: 0.408730
Accuracy on Test data: 0.49454399943351746, 0.6609282493591309
Step 9 | Training Loss: 0.142892 | Validation Accuracy: 0.416270
Accuracy on Test data: 0.4937899112701416, 0.6592404842376709
Step 10 | Training Loss: 0.620488 | Validation Accuracy: 0.402778
Accuracy on Test data: 0.49055179953575134, 0.6615189909934998
Step 11 | Training Loss: -1.805167 | Validation Accuracy: 0.426587
Accuracy on Test data: 0.49614086747169495, 0.6622784733772278
Step 12 | Training Loss: -1.487145 | Validation Accuracy: 0.395635
Accuracy on Test data: 0.4935237765312195, 0.6615189909934998
Step 13 | Training Loss: -0.806061 | Validation Accuracy: 0.394048
Accuracy on Test data: 0.49179381132125854, 0.657130777835846
Step 14 | Training Loss: -0.242587 | Validation Accuracy: 0.410317
Accuracy on Test data: 0.4901082217693329, 0.6590717434883118
Step 15 | Training Loss: -1.465446 | Validation Accuracy: 0.413889
Accuracy on Test data: 0.4916607439517975, 0.6555274128913879
Step 1 | Training Loss: -0.710419 | Validation Accuracy: 0.417460
Accuracy on Test data: 0.4963183104991913, 0.6552742719650269
Step 2 | Training Loss: -0.667464 | Validation Accuracy: 0.408333
Accuracy on Test data: 0.49241483211517334, 0.6559493541717529
Step 3 | Training Loss: -1.838987 | Validation Accuracy: 0.401190
Accuracy on Test data: 0.4975603222846985, 0.6592404842376709
Step 4 | Training Loss: -1.259902 | Validation Accuracy: 0.411508
Accuracy on Test data: 0.49263662099838257, 0.6589873433113098
Step 5 | Training Loss: -0.936995 | Validation Accuracy: 0.405556
Accuracy on Test data: 0.4921930432319641, 0.6566244959831238
Step 6 | Training Loss: -0.295595 | Validation Accuracy: 0.412302
Accuracy on Test data: 0.49210432171821594, 0.6544303894042969
Step 7 | Training Loss: -0.077332 | Validation Accuracy: 0.420238
Accuracy on Test data: 0.4950762987136841, 0.6605063080787659
Step 8 | Training Loss: -1.783312 | Validation Accuracy: 0.417857
Accuracy on Test data: 0.49711674451828003, 0.6614345908164978
Step 9 | Training Loss: -0.512126 | Validation Accuracy: 0.415873
Accuracy on Test data: 0.4933907091617584, 0.6576371192932129
Step 10 | Training Loss: -0.626216 | Validation Accuracy: 0.426587
Accuracy on Test data: 0.49334633350372314, 0.6606751084327698
Step 11 | Training Loss: 0.497934 | Validation Accuracy: 0.416667
Accuracy on Test data: 0.49365684390068054, 0.6572151780128479
Step 12 | Training Loss: 1.344081 | Validation Accuracy: 0.408333
Accuracy on Test data: 0.49520936608314514, 0.654177188873291
Step 13 | Training Loss: 0.827288 | Validation Accuracy: 0.415873
Accuracy on Test data: 0.4938342869281769, 0.6647257208824158
Step 14 | Training Loss: -1.125139 | Validation Accuracy: 0.403968
Accuracy on Test data: 0.4894428551197052, 0.6574683785438538
Step 15 | Training Loss: 0.586435 | Validation Accuracy: 0.403175
Accuracy on Test data: 0.49835875630378723, 0.6572995781898499
Current Layer Attributes - epochs:15 hidden layers:1 features count:48
Step 1 | Training Loss: 1.177376 | Validation Accuracy: 0.449603
Accuracy on Test data: 0.45511001348495483, 0.48683544993400574
Step 2 | Training Loss: 0.658469 | Validation Accuracy: 0.448810
Accuracy on Test data: 0.4623403251171112, 0.49324893951416016
Step 3 | Training Loss: 0.060655 | Validation Accuracy: 0.447619
Accuracy on Test data: 0.46100959181785583, 0.4857383966445923
Step 4 | Training Loss: 0.076248 | Validation Accuracy: 0.443254
Accuracy on Test data: 0.4548882246017456, 0.49805906414985657
Step 5 | Training Loss: -0.284888 | Validation Accuracy: 0.434127
Accuracy on Test data: 0.458392471075058, 0.48945146799087524
Step 6 | Training Loss: -1.472106 | Validation Accuracy: 0.438889
Accuracy on Test data: 0.46163058280944824, 0.4850632846355438
Step 7 | Training Loss: 0.090970 | Validation Accuracy: 0.436905
Accuracy on Test data: 0.45595279335975647, 0.4899578094482422
Step 8 | Training Loss: 0.977902 | Validation Accuracy: 0.458730
Accuracy on Test data: 0.4588804244995117, 0.49088606238365173
Step 9 | Training Loss: -0.526073 | Validation Accuracy: 0.443651
Accuracy on Test data: 0.46469128131866455, 0.48523205518722534
Step 10 | Training Loss: -0.915914 | Validation Accuracy: 0.450000
Accuracy on Test data: 0.45945706963539124, 0.4864978790283203
Step 11 | Training Loss: -0.551519 | Validation Accuracy: 0.457540
Accuracy on Test data: 0.4646025598049164, 0.48599156737327576
Step 12 | Training Loss: 1.209077 | Validation Accuracy: 0.446825
Accuracy on Test data: 0.45821505784988403, 0.49147680401802063
Step 13 | Training Loss: -0.684570 | Validation Accuracy: 0.459921
Accuracy on Test data: 0.4648243486881256, 0.4850632846355438
Step 14 | Training Loss: 0.219022 | Validation Accuracy: 0.449206
Accuracy on Test data: 0.4617636501789093, 0.4815189838409424
Step 15 | Training Loss: -1.234077 | Validation Accuracy: 0.447619
Accuracy on Test data: 0.4610539376735687, 0.4867510497570038
Step 1 | Training Loss: -0.335578 | Validation Accuracy: 0.440873
Accuracy on Test data: 0.46123138070106506, 0.49122363328933716
Step 2 | Training Loss: 0.789972 | Validation Accuracy: 0.433730
Accuracy on Test data: 0.45502129197120667, 0.48784810304641724
Step 3 | Training Loss: -1.926679 | Validation Accuracy: 0.460317
Accuracy on Test data: 0.45728352665901184, 0.48523205518722534
Step 4 | Training Loss: 0.705110 | Validation Accuracy: 0.437698
Accuracy on Test data: 0.46318310499191284, 0.4876793324947357
Step 5 | Training Loss: -0.087888 | Validation Accuracy: 0.448810
Accuracy on Test data: 0.4602111279964447, 0.4800843894481659
Step 6 | Training Loss: -0.682227 | Validation Accuracy: 0.451587
Accuracy on Test data: 0.46779629588127136, 0.4883544445037842
Step 7 | Training Loss: -0.308697 | Validation Accuracy: 0.430556
Accuracy on Test data: 0.4598562717437744, 0.4841350317001343
Step 8 | Training Loss: -0.383137 | Validation Accuracy: 0.448810
Accuracy on Test data: 0.4604772925376892, 0.49569621682167053
Step 9 | Training Loss: -1.463610 | Validation Accuracy: 0.436508
Accuracy on Test data: 0.4571061134338379, 0.48801687359809875
Step 10 | Training Loss: -0.117304 | Validation Accuracy: 0.436111
Accuracy on Test data: 0.46003371477127075, 0.4870886206626892
Step 11 | Training Loss: -1.354244 | Validation Accuracy: 0.434524
Accuracy on Test data: 0.4571061134338379, 0.48599156737327576
Step 12 | Training Loss: -1.656140 | Validation Accuracy: 0.445635
Accuracy on Test data: 0.46029984951019287, 0.501940906047821
Step 13 | Training Loss: -0.225853 | Validation Accuracy: 0.439286
Accuracy on Test data: 0.4614975154399872, 0.4885232150554657
Step 14 | Training Loss: -2.319096 | Validation Accuracy: 0.437302
Accuracy on Test data: 0.45697301626205444, 0.4850632846355438
Step 15 | Training Loss: -1.044550 | Validation Accuracy: 0.456746
Accuracy on Test data: 0.46100959181785583, 0.4881012737751007
Step 1 | Training Loss: 0.310323 | Validation Accuracy: 0.445635
Accuracy on Test data: 0.45475515723228455, 0.4897046387195587
Step 2 | Training Loss: 0.954790 | Validation Accuracy: 0.451190
Accuracy on Test data: 0.4596344828605652, 0.48582279682159424
Step 3 | Training Loss: -0.226127 | Validation Accuracy: 0.462698
Accuracy on Test data: 0.4641589820384979, 0.4903797507286072
Step 4 | Training Loss: 0.116851 | Validation Accuracy: 0.440476
Accuracy on Test data: 0.4626508057117462, 0.49400845170021057
Step 5 | Training Loss: 0.464153 | Validation Accuracy: 0.452778
Accuracy on Test data: 0.4607878029346466, 0.48556962609291077
Step 6 | Training Loss: -1.462924 | Validation Accuracy: 0.435317
Accuracy on Test data: 0.462118536233902, 0.4863291084766388
Step 7 | Training Loss: -1.806085 | Validation Accuracy: 0.442460
Accuracy on Test data: 0.4555535912513733, 0.48379746079444885
Step 8 | Training Loss: -0.306295 | Validation Accuracy: 0.439286
Accuracy on Test data: 0.4527590572834015, 0.4881012737751007
Step 9 | Training Loss: -0.996028 | Validation Accuracy: 0.458333
Accuracy on Test data: 0.45737224817276, 0.4832911491394043
Step 10 | Training Loss: -0.279012 | Validation Accuracy: 0.458730
Accuracy on Test data: 0.46123138070106506, 0.4919831156730652
Step 11 | Training Loss: -0.505544 | Validation Accuracy: 0.438095
Accuracy on Test data: 0.4586586356163025, 0.49080169200897217
Step 12 | Training Loss: 0.920861 | Validation Accuracy: 0.429365
Accuracy on Test data: 0.45786017179489136, 0.4832911491394043
Step 13 | Training Loss: -0.885194 | Validation Accuracy: 0.444048
Accuracy on Test data: 0.4588804244995117, 0.4947679340839386
Step 14 | Training Loss: 0.304951 | Validation Accuracy: 0.455952
Accuracy on Test data: 0.46100959181785583, 0.49383965134620667
Step 15 | Training Loss: 1.561402 | Validation Accuracy: 0.451190
Accuracy on Test data: 0.45945706963539124, 0.4792405068874359
Current Layer Attributes - epochs:15 hidden layers:1 features count:122
Step 1 | Training Loss: -0.987809 | Validation Accuracy: 0.379365
Accuracy on Test data: 0.45413413643836975, 0.5205063223838806
Step 2 | Training Loss: -0.235014 | Validation Accuracy: 0.403175
Accuracy on Test data: 0.4555535912513733, 0.5240506529808044
Step 3 | Training Loss: -1.570721 | Validation Accuracy: 0.398413
Accuracy on Test data: 0.4571504592895508, 0.5099577903747559
Step 4 | Training Loss: -0.606335 | Validation Accuracy: 0.396032
Accuracy on Test data: 0.4473917782306671, 0.5118143558502197
Step 5 | Training Loss: 3.262986 | Validation Accuracy: 0.378968
Accuracy on Test data: 0.4496096670627594, 0.5207595229148865
Step 6 | Training Loss: -0.459731 | Validation Accuracy: 0.383333
Accuracy on Test data: 0.4502306580543518, 0.5175527334213257
Step 7 | Training Loss: 0.359904 | Validation Accuracy: 0.411111
Accuracy on Test data: 0.4449964463710785, 0.5145991444587708
Step 8 | Training Loss: 0.880148 | Validation Accuracy: 0.401587
Accuracy on Test data: 0.45227110385894775, 0.5119830965995789
Step 9 | Training Loss: 0.258869 | Validation Accuracy: 0.405159
Accuracy on Test data: 0.4499645233154297, 0.5089451670646667
Step 10 | Training Loss: -0.196523 | Validation Accuracy: 0.394444
Accuracy on Test data: 0.44974273443222046, 0.5265823006629944
Step 11 | Training Loss: 0.016282 | Validation Accuracy: 0.385714
Accuracy on Test data: 0.4526703357696533, 0.5137552618980408
Step 12 | Training Loss: 1.317881 | Validation Accuracy: 0.375794
Accuracy on Test data: 0.4495652914047241, 0.5187341570854187
Step 13 | Training Loss: -0.856439 | Validation Accuracy: 0.397222
Accuracy on Test data: 0.4487668573856354, 0.5291982889175415
Step 14 | Training Loss: -1.661043 | Validation Accuracy: 0.380556
Accuracy on Test data: 0.4480571448802948, 0.5234599113464355
Step 15 | Training Loss: -0.483050 | Validation Accuracy: 0.382937
Accuracy on Test data: 0.45262598991394043, 0.5260759592056274
Step 1 | Training Loss: -0.475000 | Validation Accuracy: 0.385714
Accuracy on Test data: 0.45351311564445496, 0.5229535698890686
Step 2 | Training Loss: -1.322364 | Validation Accuracy: 0.404762
Accuracy on Test data: 0.444419801235199, 0.5140084624290466
Step 3 | Training Loss: -1.893875 | Validation Accuracy: 0.411905
Accuracy on Test data: 0.4468151032924652, 0.5175527334213257
Step 4 | Training Loss: -2.124953 | Validation Accuracy: 0.378175
Accuracy on Test data: 0.44233497977256775, 0.5196624398231506
Step 5 | Training Loss: -0.609365 | Validation Accuracy: 0.392857
Accuracy on Test data: 0.4470812678337097, 0.5170463919639587
Step 6 | Training Loss: 0.039768 | Validation Accuracy: 0.401190
Accuracy on Test data: 0.45253726840019226, 0.5154430270195007
Step 7 | Training Loss: 1.828707 | Validation Accuracy: 0.394841
Accuracy on Test data: 0.4504967927932739, 0.5124050378799438
Step 8 | Training Loss: -0.513766 | Validation Accuracy: 0.385317
Accuracy on Test data: 0.448456346988678, 0.5199156403541565
Step 9 | Training Loss: 0.232687 | Validation Accuracy: 0.392460
Accuracy on Test data: 0.45688432455062866, 0.5167932510375977
Step 10 | Training Loss: -0.781606 | Validation Accuracy: 0.404762
Accuracy on Test data: 0.445573091506958, 0.5151054859161377
Step 11 | Training Loss: -0.934012 | Validation Accuracy: 0.376984
Accuracy on Test data: 0.443399578332901, 0.5113924145698547
Step 12 | Training Loss: -0.662679 | Validation Accuracy: 0.398413
Accuracy on Test data: 0.4523598253726959, 0.5168776512145996
Step 13 | Training Loss: -1.128522 | Validation Accuracy: 0.407540
Accuracy on Test data: 0.454355925321579, 0.5149366855621338
Step 14 | Training Loss: -0.718220 | Validation Accuracy: 0.373016
Accuracy on Test data: 0.45005321502685547, 0.5227848291397095
Step 15 | Training Loss: -0.132595 | Validation Accuracy: 0.384524
Accuracy on Test data: 0.45440027117729187, 0.5137552618980408
Step 1 | Training Loss: -0.100541 | Validation Accuracy: 0.382540
Accuracy on Test data: 0.45169445872306824, 0.5196624398231506
Step 2 | Training Loss: 0.681874 | Validation Accuracy: 0.389683
Accuracy on Test data: 0.45692867040634155, 0.5110548734664917
Step 3 | Training Loss: 0.608463 | Validation Accuracy: 0.392063
Accuracy on Test data: 0.4511621594429016, 0.5261603593826294
Step 4 | Training Loss: 1.788103 | Validation Accuracy: 0.396429
Accuracy on Test data: 0.44916608929634094, 0.5104641318321228
Step 5 | Training Loss: -0.222813 | Validation Accuracy: 0.396429
Accuracy on Test data: 0.4434439241886139, 0.5218565464019775
Step 6 | Training Loss: -1.176794 | Validation Accuracy: 0.368254
Accuracy on Test data: 0.4524485468864441, 0.5184810161590576
Step 7 | Training Loss: -0.946261 | Validation Accuracy: 0.383730
Accuracy on Test data: 0.4456618130207062, 0.5190717577934265
Step 8 | Training Loss: 0.620899 | Validation Accuracy: 0.402778
Accuracy on Test data: 0.44819021224975586, 0.5213502049446106
Step 9 | Training Loss: -0.556859 | Validation Accuracy: 0.372619
Accuracy on Test data: 0.45599716901779175, 0.5185654163360596
Step 10 | Training Loss: -1.636942 | Validation Accuracy: 0.411111
Accuracy on Test data: 0.45222675800323486, 0.5206751227378845
Step 11 | Training Loss: -2.528335 | Validation Accuracy: 0.381746
Accuracy on Test data: 0.4511178135871887, 0.5210126638412476
Step 12 | Training Loss: -1.038503 | Validation Accuracy: 0.391667
Accuracy on Test data: 0.45231547951698303, 0.5276793241500854
Step 13 | Training Loss: 0.894104 | Validation Accuracy: 0.397619
Accuracy on Test data: 0.4536905586719513, 0.5167088508605957
Step 14 | Training Loss: 0.086623 | Validation Accuracy: 0.370635
Accuracy on Test data: 0.44938787817955017, 0.5212658047676086
Step 15 | Training Loss: -1.140465 | Validation Accuracy: 0.379762
Accuracy on Test data: 0.45133960247039795, 0.5164557099342346
Current Layer Attributes - epochs:15 hidden layers:3 features count:1
Step 1 | Training Loss: -1.385110 | Validation Accuracy: 0.462302
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 2 | Training Loss: 1.716821 | Validation Accuracy: 0.453175
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 3 | Training Loss: -0.387485 | Validation Accuracy: 0.470238
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 4 | Training Loss: 0.598210 | Validation Accuracy: 0.460714
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 5 | Training Loss: -1.002855 | Validation Accuracy: 0.474206
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 6 | Training Loss: 1.471208 | Validation Accuracy: 0.455159
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 7 | Training Loss: -0.220069 | Validation Accuracy: 0.468651
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 8 | Training Loss: -0.476793 | Validation Accuracy: 0.456746
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 9 | Training Loss: -0.068501 | Validation Accuracy: 0.442857
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 10 | Training Loss: 0.702546 | Validation Accuracy: 0.462302
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 11 | Training Loss: -0.157852 | Validation Accuracy: 0.455159
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 12 | Training Loss: -0.505582 | Validation Accuracy: 0.461508
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 13 | Training Loss: -1.517800 | Validation Accuracy: 0.469444
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 14 | Training Loss: -0.323850 | Validation Accuracy: 0.459127
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 15 | Training Loss: 0.691066 | Validation Accuracy: 0.453175
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 1 | Training Loss: -0.795270 | Validation Accuracy: 0.476984
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 2 | Training Loss: 1.606780 | Validation Accuracy: 0.459921
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 3 | Training Loss: -0.580686 | Validation Accuracy: 0.471032
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 4 | Training Loss: -1.127040 | Validation Accuracy: 0.462302
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 5 | Training Loss: 0.758011 | Validation Accuracy: 0.467857
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 6 | Training Loss: 1.858188 | Validation Accuracy: 0.459921
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 7 | Training Loss: 1.195904 | Validation Accuracy: 0.452778
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 8 | Training Loss: 1.081043 | Validation Accuracy: 0.460317
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 9 | Training Loss: -0.750089 | Validation Accuracy: 0.461905
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 10 | Training Loss: 0.776126 | Validation Accuracy: 0.482540
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 11 | Training Loss: -1.512459 | Validation Accuracy: 0.470238
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 12 | Training Loss: 0.581993 | Validation Accuracy: 0.459921
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 13 | Training Loss: -1.048251 | Validation Accuracy: 0.475794
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 14 | Training Loss: 1.074134 | Validation Accuracy: 0.453968
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 15 | Training Loss: 0.498253 | Validation Accuracy: 0.456349
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 1 | Training Loss: 0.107780 | Validation Accuracy: 0.442063
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 2 | Training Loss: -0.220905 | Validation Accuracy: 0.453571
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 3 | Training Loss: -0.272965 | Validation Accuracy: 0.455952
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 4 | Training Loss: -0.565880 | Validation Accuracy: 0.470635
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 5 | Training Loss: -0.271646 | Validation Accuracy: 0.464683
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 6 | Training Loss: -0.130638 | Validation Accuracy: 0.461508
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 7 | Training Loss: 0.114356 | Validation Accuracy: 0.471032
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 8 | Training Loss: -0.656342 | Validation Accuracy: 0.471825
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 9 | Training Loss: 0.733499 | Validation Accuracy: 0.459524
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 10 | Training Loss: -0.853060 | Validation Accuracy: 0.478571
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 11 | Training Loss: -0.856876 | Validation Accuracy: 0.490476
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 12 | Training Loss: 2.104938 | Validation Accuracy: 0.460714
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 13 | Training Loss: 0.071889 | Validation Accuracy: 0.462698
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 14 | Training Loss: -0.481935 | Validation Accuracy: 0.467460
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Step 15 | Training Loss: 0.131929 | Validation Accuracy: 0.459127
Accuracy on Test data: 0.5692423582077026, 0.8183966279029846
Current Layer Attributes - epochs:15 hidden layers:3 features count:12
Step 1 | Training Loss: -0.249296 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.4188697636127472, 0.20607595145702362
Step 2 | Training Loss: -0.061784 | Validation Accuracy: 0.506349
Accuracy on Test data: 0.415764719247818, 0.20742616057395935
Step 3 | Training Loss: 1.470679 | Validation Accuracy: 0.505952
Accuracy on Test data: 0.42020049691200256, 0.20582278072834015
Step 4 | Training Loss: 0.707889 | Validation Accuracy: 0.519841
Accuracy on Test data: 0.41931334137916565, 0.20548522472381592
Step 5 | Training Loss: -1.183862 | Validation Accuracy: 0.531746
Accuracy on Test data: 0.41931334137916565, 0.20455695688724518
Step 6 | Training Loss: 0.784995 | Validation Accuracy: 0.532540
Accuracy on Test data: 0.41736161708831787, 0.20464135706424713
Step 7 | Training Loss: -0.596322 | Validation Accuracy: 0.524206
Accuracy on Test data: 0.4191358983516693, 0.20405063033103943
Step 8 | Training Loss: 0.523990 | Validation Accuracy: 0.510317
Accuracy on Test data: 0.4181600511074066, 0.20759493112564087
Step 9 | Training Loss: 0.598612 | Validation Accuracy: 0.524206
Accuracy on Test data: 0.4175390303134918, 0.2059071660041809
Step 10 | Training Loss: -0.260474 | Validation Accuracy: 0.496032
Accuracy on Test data: 0.41687366366386414, 0.20776371657848358
Step 11 | Training Loss: 2.120972 | Validation Accuracy: 0.503571
Accuracy on Test data: 0.4178938865661621, 0.20464135706424713
Step 12 | Training Loss: 0.359490 | Validation Accuracy: 0.519444
Accuracy on Test data: 0.41833746433258057, 0.20827004313468933
Step 13 | Training Loss: 2.635729 | Validation Accuracy: 0.515079
Accuracy on Test data: 0.4163413643836975, 0.20624472200870514
Step 14 | Training Loss: 0.608849 | Validation Accuracy: 0.512698
Accuracy on Test data: 0.42059972882270813, 0.20548522472381592
Step 15 | Training Loss: -1.079058 | Validation Accuracy: 0.500794
Accuracy on Test data: 0.41842618584632874, 0.2022784799337387
Step 1 | Training Loss: -0.272809 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.4190915524959564, 0.20708860456943512
Step 2 | Training Loss: 0.152876 | Validation Accuracy: 0.513492
Accuracy on Test data: 0.4185149073600769, 0.20185653865337372
Step 3 | Training Loss: -0.443560 | Validation Accuracy: 0.505159
Accuracy on Test data: 0.418781042098999, 0.20497889816761017
Step 4 | Training Loss: -0.136173 | Validation Accuracy: 0.509921
Accuracy on Test data: 0.41762775182724, 0.2053164541721344
Step 5 | Training Loss: -1.181677 | Validation Accuracy: 0.517857
Accuracy on Test data: 0.41811567544937134, 0.20902954041957855
Step 6 | Training Loss: -0.521678 | Validation Accuracy: 0.513492
Accuracy on Test data: 0.41931334137916565, 0.20565401017665863
Step 7 | Training Loss: -2.866873 | Validation Accuracy: 0.512302
Accuracy on Test data: 0.4191358983516693, 0.20481012761592865
Step 8 | Training Loss: 1.580534 | Validation Accuracy: 0.525397
Accuracy on Test data: 0.41842618584632874, 0.20565401017665863
Step 9 | Training Loss: -0.880889 | Validation Accuracy: 0.541667
Accuracy on Test data: 0.41895848512649536, 0.2038818597793579
Step 10 | Training Loss: -0.979880 | Validation Accuracy: 0.519444
Accuracy on Test data: 0.4186036288738251, 0.20548522472381592
Step 11 | Training Loss: 1.201837 | Validation Accuracy: 0.509524
Accuracy on Test data: 0.41864797472953796, 0.20582278072834015
Step 12 | Training Loss: -1.275627 | Validation Accuracy: 0.480952
Accuracy on Test data: 0.4170067310333252, 0.20506329834461212
Step 13 | Training Loss: -0.664886 | Validation Accuracy: 0.523810
Accuracy on Test data: 0.4176720976829529, 0.2063291072845459
Step 14 | Training Loss: 0.582387 | Validation Accuracy: 0.517063
Accuracy on Test data: 0.4194020628929138, 0.20599156618118286
Step 15 | Training Loss: -0.155715 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.42020049691200256, 0.20624472200870514
Step 1 | Training Loss: -1.803632 | Validation Accuracy: 0.527381
Accuracy on Test data: 0.4197125732898712, 0.2063291072845459
Step 2 | Training Loss: 0.760177 | Validation Accuracy: 0.504365
Accuracy on Test data: 0.4188254177570343, 0.20700421929359436
Step 3 | Training Loss: 0.706345 | Validation Accuracy: 0.505952
Accuracy on Test data: 0.41833746433258057, 0.20759493112564087
Step 4 | Training Loss: 0.164025 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.41771647334098816, 0.2073417752981186
Step 5 | Training Loss: 1.059018 | Validation Accuracy: 0.520238
Accuracy on Test data: 0.4160308837890625, 0.20902954041957855
Step 6 | Training Loss: -0.863067 | Validation Accuracy: 0.508333
Accuracy on Test data: 0.4182487726211548, 0.20278480648994446
Step 7 | Training Loss: 2.357160 | Validation Accuracy: 0.505952
Accuracy on Test data: 0.41713982820510864, 0.20548522472381592
Step 8 | Training Loss: -1.342099 | Validation Accuracy: 0.519048
Accuracy on Test data: 0.41869232058525085, 0.20725739002227783
Step 9 | Training Loss: -0.208693 | Validation Accuracy: 0.509127
Accuracy on Test data: 0.4172285199165344, 0.2038818597793579
Step 10 | Training Loss: -1.362562 | Validation Accuracy: 0.515476
Accuracy on Test data: 0.4182043969631195, 0.2059071660041809
Step 11 | Training Loss: 0.528323 | Validation Accuracy: 0.512698
Accuracy on Test data: 0.41687366366386414, 0.2037130743265152
Step 12 | Training Loss: 0.342865 | Validation Accuracy: 0.503571
Accuracy on Test data: 0.41713982820510864, 0.2059071660041809
Step 13 | Training Loss: 0.680924 | Validation Accuracy: 0.539286
Accuracy on Test data: 0.41718417406082153, 0.20447257161140442
Step 14 | Training Loss: -0.506816 | Validation Accuracy: 0.495635
Accuracy on Test data: 0.4182487726211548, 0.20084388554096222
Step 15 | Training Loss: 0.083248 | Validation Accuracy: 0.527381
Accuracy on Test data: 0.41776081919670105, 0.20827004313468933
Current Layer Attributes - epochs:15 hidden layers:3 features count:24
Step 1 | Training Loss: 2.206794 | Validation Accuracy: 0.536905
Accuracy on Test data: 0.4322657883167267, 0.18776370584964752
Step 2 | Training Loss: -0.215389 | Validation Accuracy: 0.532937
Accuracy on Test data: 0.43177786469459534, 0.188016876578331
Step 3 | Training Loss: -0.176164 | Validation Accuracy: 0.528968
Accuracy on Test data: 0.4315560758113861, 0.18691983819007874
Step 4 | Training Loss: -0.317056 | Validation Accuracy: 0.535317
Accuracy on Test data: 0.43053585290908813, 0.18734177947044373
Step 5 | Training Loss: -0.962547 | Validation Accuracy: 0.534921
Accuracy on Test data: 0.4322214424610138, 0.18742616474628448
Step 6 | Training Loss: -0.614799 | Validation Accuracy: 0.529365
Accuracy on Test data: 0.43293115496635437, 0.1886075884103775
Step 7 | Training Loss: -0.631634 | Validation Accuracy: 0.527381
Accuracy on Test data: 0.4328868091106415, 0.18632911145687103
Step 8 | Training Loss: -2.509959 | Validation Accuracy: 0.561111
Accuracy on Test data: 0.4308907091617584, 0.18793249130249023
Step 9 | Training Loss: -1.107783 | Validation Accuracy: 0.545238
Accuracy on Test data: 0.4322657883167267, 0.18742616474628448
Step 10 | Training Loss: 0.470990 | Validation Accuracy: 0.519444
Accuracy on Test data: 0.4331529438495636, 0.18886075913906097
Step 11 | Training Loss: 0.512852 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.4310237765312195, 0.18666666746139526
Step 12 | Training Loss: 0.076366 | Validation Accuracy: 0.536905
Accuracy on Test data: 0.4318665862083435, 0.18742616474628448
Step 13 | Training Loss: 1.361508 | Validation Accuracy: 0.530952
Accuracy on Test data: 0.4327980875968933, 0.18886075913906097
Step 14 | Training Loss: -0.836809 | Validation Accuracy: 0.555556
Accuracy on Test data: 0.432443231344223, 0.1864134967327118
Step 15 | Training Loss: -0.996434 | Validation Accuracy: 0.538095
Accuracy on Test data: 0.43306422233581543, 0.1890295296907425
Step 1 | Training Loss: 0.080132 | Validation Accuracy: 0.532937
Accuracy on Test data: 0.43199965357780457, 0.18683543801307678
Step 2 | Training Loss: 0.908423 | Validation Accuracy: 0.527778
Accuracy on Test data: 0.4318222105503082, 0.1870042234659195
Step 3 | Training Loss: 1.067681 | Validation Accuracy: 0.534921
Accuracy on Test data: 0.4324875771999359, 0.18827004730701447
Step 4 | Training Loss: 0.210720 | Validation Accuracy: 0.558730
Accuracy on Test data: 0.4322214424610138, 0.18742616474628448
Step 5 | Training Loss: -0.653318 | Validation Accuracy: 0.537698
Accuracy on Test data: 0.4334190785884857, 0.18742616474628448
Step 6 | Training Loss: 0.091769 | Validation Accuracy: 0.538492
Accuracy on Test data: 0.43297550082206726, 0.18894514441490173
Step 7 | Training Loss: -1.584743 | Validation Accuracy: 0.540476
Accuracy on Test data: 0.4318222105503082, 0.19012658298015594
Step 8 | Training Loss: 0.392808 | Validation Accuracy: 0.543254
Accuracy on Test data: 0.4318665862083435, 0.18945147097110748
Step 9 | Training Loss: 1.956690 | Validation Accuracy: 0.538095
Accuracy on Test data: 0.4328868091106415, 0.1870042234659195
Step 10 | Training Loss: -0.303784 | Validation Accuracy: 0.534921
Accuracy on Test data: 0.4318665862083435, 0.187594935297966
Step 11 | Training Loss: -0.513655 | Validation Accuracy: 0.542063
Accuracy on Test data: 0.4333747327327728, 0.18953587114810944
Step 12 | Training Loss: 0.623752 | Validation Accuracy: 0.527381
Accuracy on Test data: 0.432443231344223, 0.1859915554523468
Step 13 | Training Loss: 0.255285 | Validation Accuracy: 0.534524
Accuracy on Test data: 0.4318222105503082, 0.18708860874176025
Step 14 | Training Loss: 0.178638 | Validation Accuracy: 0.532143
Accuracy on Test data: 0.43301987648010254, 0.18734177947044373
Step 15 | Training Loss: -0.755432 | Validation Accuracy: 0.529762
Accuracy on Test data: 0.4331972897052765, 0.1897890269756317
Step 1 | Training Loss: 0.497114 | Validation Accuracy: 0.546429
Accuracy on Test data: 0.432620644569397, 0.188016876578331
Step 2 | Training Loss: 0.047705 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.4313342869281769, 0.18675105273723602
Step 3 | Training Loss: 0.384734 | Validation Accuracy: 0.534127
Accuracy on Test data: 0.4328868091106415, 0.18573839962482452
Step 4 | Training Loss: 0.137342 | Validation Accuracy: 0.548016
Accuracy on Test data: 0.43301987648010254, 0.18691983819007874
Step 5 | Training Loss: 0.156170 | Validation Accuracy: 0.541667
Accuracy on Test data: 0.43266502022743225, 0.1870042234659195
Step 6 | Training Loss: -0.227096 | Validation Accuracy: 0.511905
Accuracy on Test data: 0.4324875771999359, 0.18632911145687103
Step 7 | Training Loss: 0.409700 | Validation Accuracy: 0.540873
Accuracy on Test data: 0.4319552779197693, 0.1886075884103775
Step 8 | Training Loss: -0.387109 | Validation Accuracy: 0.540079
Accuracy on Test data: 0.4321770668029785, 0.18624472618103027
Step 9 | Training Loss: 0.921574 | Validation Accuracy: 0.539286
Accuracy on Test data: 0.4318222105503082, 0.187594935297966
Step 10 | Training Loss: 0.186226 | Validation Accuracy: 0.534127
Accuracy on Test data: 0.43204399943351746, 0.18767932057380676
Step 11 | Training Loss: -1.091575 | Validation Accuracy: 0.526190
Accuracy on Test data: 0.43239885568618774, 0.18675105273723602
Step 12 | Training Loss: 0.426858 | Validation Accuracy: 0.530556
Accuracy on Test data: 0.4313342869281769, 0.1890295296907425
Step 13 | Training Loss: -0.373422 | Validation Accuracy: 0.516270
Accuracy on Test data: 0.4318665862083435, 0.1891983151435852
Step 14 | Training Loss: -0.149036 | Validation Accuracy: 0.548016
Accuracy on Test data: 0.4322214424610138, 0.18776370584964752
Step 15 | Training Loss: 1.501287 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.4328868091106415, 0.188016876578331
Current Layer Attributes - epochs:15 hidden layers:3 features count:48
Step 1 | Training Loss: -0.685657 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.5347764492034912, 0.4982278347015381
Step 2 | Training Loss: 0.379653 | Validation Accuracy: 0.528571
Accuracy on Test data: 0.5354861617088318, 0.502362847328186
Step 3 | Training Loss: 0.338650 | Validation Accuracy: 0.519048
Accuracy on Test data: 0.5362846255302429, 0.4982278347015381
Step 4 | Training Loss: 0.866715 | Validation Accuracy: 0.532937
Accuracy on Test data: 0.531981885433197, 0.4929113984107971
Step 5 | Training Loss: 0.875474 | Validation Accuracy: 0.519048
Accuracy on Test data: 0.5348207950592041, 0.501603364944458
Step 6 | Training Loss: 0.505996 | Validation Accuracy: 0.537302
Accuracy on Test data: 0.5339336395263672, 0.5090295076370239
Step 7 | Training Loss: -1.121361 | Validation Accuracy: 0.521429
Accuracy on Test data: 0.5327803492546082, 0.502362847328186
Step 8 | Training Loss: -1.492867 | Validation Accuracy: 0.519841
Accuracy on Test data: 0.5381032824516296, 0.49873417615890503
Step 9 | Training Loss: -0.237200 | Validation Accuracy: 0.521825
Accuracy on Test data: 0.5352200269699097, 0.49544304609298706
Step 10 | Training Loss: 1.055535 | Validation Accuracy: 0.508730
Accuracy on Test data: 0.5396558046340942, 0.5063291192054749
Step 11 | Training Loss: 0.472918 | Validation Accuracy: 0.523413
Accuracy on Test data: 0.5310503840446472, 0.499240517616272
Step 12 | Training Loss: 1.481300 | Validation Accuracy: 0.523810
Accuracy on Test data: 0.5293204188346863, 0.5017721652984619
Step 13 | Training Loss: -1.695759 | Validation Accuracy: 0.527778
Accuracy on Test data: 0.5335787534713745, 0.4897046387195587
Step 14 | Training Loss: 0.195622 | Validation Accuracy: 0.508730
Accuracy on Test data: 0.5329133868217468, 0.49848100543022156
Step 15 | Training Loss: 1.472393 | Validation Accuracy: 0.528968
Accuracy on Test data: 0.5386798977851868, 0.4978058934211731
Step 1 | Training Loss: 1.002597 | Validation Accuracy: 0.520635
Accuracy on Test data: 0.5374822616577148, 0.499578058719635
Step 2 | Training Loss: -0.055763 | Validation Accuracy: 0.535714
Accuracy on Test data: 0.5381476283073425, 0.4981434643268585
Step 3 | Training Loss: 0.704571 | Validation Accuracy: 0.513095
Accuracy on Test data: 0.5368168950080872, 0.5047257542610168
Step 4 | Training Loss: -0.807165 | Validation Accuracy: 0.530556
Accuracy on Test data: 0.5323367714881897, 0.4870886206626892
Step 5 | Training Loss: -1.561144 | Validation Accuracy: 0.513889
Accuracy on Test data: 0.5370386838912964, 0.4965400695800781
Step 6 | Training Loss: 0.150347 | Validation Accuracy: 0.521429
Accuracy on Test data: 0.5376597046852112, 0.49831223487854004
Step 7 | Training Loss: 0.810321 | Validation Accuracy: 0.532540
Accuracy on Test data: 0.5323811173439026, 0.507341742515564
Step 8 | Training Loss: 1.985820 | Validation Accuracy: 0.517063
Accuracy on Test data: 0.5338449478149414, 0.4967932403087616
Step 9 | Training Loss: 0.018185 | Validation Accuracy: 0.524603
Accuracy on Test data: 0.536018431186676, 0.5005063414573669
Step 10 | Training Loss: 1.164853 | Validation Accuracy: 0.525794
Accuracy on Test data: 0.5358410477638245, 0.49729958176612854
Step 11 | Training Loss: -1.032303 | Validation Accuracy: 0.523016
Accuracy on Test data: 0.5387242436408997, 0.500421941280365
Step 12 | Training Loss: 0.018382 | Validation Accuracy: 0.509524
Accuracy on Test data: 0.5339779853820801, 0.49603375792503357
Step 13 | Training Loss: 0.242169 | Validation Accuracy: 0.507937
Accuracy on Test data: 0.5343328714370728, 0.4933333396911621
Step 14 | Training Loss: -0.700934 | Validation Accuracy: 0.542460
Accuracy on Test data: 0.5393452644348145, 0.499578058719635
Step 15 | Training Loss: -0.659305 | Validation Accuracy: 0.526984
Accuracy on Test data: 0.5336675047874451, 0.49586498737335205
Step 1 | Training Loss: 0.195334 | Validation Accuracy: 0.513492
Accuracy on Test data: 0.5302075743675232, 0.5110548734664917
Step 2 | Training Loss: 0.105271 | Validation Accuracy: 0.510714
Accuracy on Test data: 0.5369499921798706, 0.49223628640174866
Step 3 | Training Loss: -0.590467 | Validation Accuracy: 0.511111
Accuracy on Test data: 0.5371717810630798, 0.5021941065788269
Step 4 | Training Loss: 0.384258 | Validation Accuracy: 0.515873
Accuracy on Test data: 0.5338892936706543, 0.503713071346283
Step 5 | Training Loss: 0.560851 | Validation Accuracy: 0.523016
Accuracy on Test data: 0.536550760269165, 0.49890294671058655
Step 6 | Training Loss: 2.442774 | Validation Accuracy: 0.507540
Accuracy on Test data: 0.5380589365959167, 0.505316436290741
Step 7 | Training Loss: -1.840437 | Validation Accuracy: 0.535714
Accuracy on Test data: 0.5304737687110901, 0.4953586459159851
Step 8 | Training Loss: 0.268576 | Validation Accuracy: 0.508730
Accuracy on Test data: 0.5357522964477539, 0.4947679340839386
Step 9 | Training Loss: 1.493465 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.5387686491012573, 0.500337541103363
Step 10 | Training Loss: 0.068924 | Validation Accuracy: 0.509524
Accuracy on Test data: 0.5315826535224915, 0.502869188785553
Step 11 | Training Loss: -0.114047 | Validation Accuracy: 0.537698
Accuracy on Test data: 0.5292317271232605, 0.5102953314781189
Step 12 | Training Loss: 0.475160 | Validation Accuracy: 0.515079
Accuracy on Test data: 0.5361071825027466, 0.5033755302429199
Step 13 | Training Loss: -0.023679 | Validation Accuracy: 0.526587
Accuracy on Test data: 0.5359740853309631, 0.4929957687854767
Step 14 | Training Loss: 0.413639 | Validation Accuracy: 0.537698
Accuracy on Test data: 0.5384581089019775, 0.4981434643268585
Step 15 | Training Loss: 2.403820 | Validation Accuracy: 0.519841
Accuracy on Test data: 0.5320706367492676, 0.5086075663566589
Current Layer Attributes - epochs:15 hidden layers:3 features count:122
Step 1 | Training Loss: -1.482739 | Validation Accuracy: 0.533333
Accuracy on Test data: 0.43084633350372314, 0.18168775737285614
Step 2 | Training Loss: 0.389804 | Validation Accuracy: 0.531349
Accuracy on Test data: 0.4307132661342621, 0.18143460154533386
Step 3 | Training Loss: 1.876210 | Validation Accuracy: 0.540873
Accuracy on Test data: 0.4308907091617584, 0.1817721575498581
Step 4 | Training Loss: 0.207261 | Validation Accuracy: 0.535714
Accuracy on Test data: 0.4306689202785492, 0.1817721575498581
Step 5 | Training Loss: -0.610006 | Validation Accuracy: 0.560317
Accuracy on Test data: 0.4307132661342621, 0.18168775737285614
Step 6 | Training Loss: 0.182840 | Validation Accuracy: 0.518651
Accuracy on Test data: 0.4307132661342621, 0.18168775737285614
Step 7 | Training Loss: 1.097769 | Validation Accuracy: 0.547619
Accuracy on Test data: 0.4306245446205139, 0.18168775737285614
Step 8 | Training Loss: -0.528752 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.4307132661342621, 0.1819409281015396
Step 9 | Training Loss: -0.485554 | Validation Accuracy: 0.549206
Accuracy on Test data: 0.4307132661342621, 0.18185654282569885
Step 10 | Training Loss: 0.611451 | Validation Accuracy: 0.521032
Accuracy on Test data: 0.4308907091617584, 0.18168775737285614
Step 11 | Training Loss: 0.172890 | Validation Accuracy: 0.525794
Accuracy on Test data: 0.43080198764801025, 0.18160337209701538
Step 12 | Training Loss: 0.221721 | Validation Accuracy: 0.523810
Accuracy on Test data: 0.43080198764801025, 0.18168775737285614
Step 13 | Training Loss: 1.078540 | Validation Accuracy: 0.540476
Accuracy on Test data: 0.4308907091617584, 0.18168775737285614
Step 14 | Training Loss: -0.321203 | Validation Accuracy: 0.531349
Accuracy on Test data: 0.43075764179229736, 0.1817721575498581
Step 15 | Training Loss: -0.896776 | Validation Accuracy: 0.524603
Accuracy on Test data: 0.43080198764801025, 0.18185654282569885
Step 1 | Training Loss: 2.262970 | Validation Accuracy: 0.544841
Accuracy on Test data: 0.43084633350372314, 0.18143460154533386
Step 2 | Training Loss: 0.891318 | Validation Accuracy: 0.552381
Accuracy on Test data: 0.4306689202785492, 0.1817721575498581
Step 3 | Training Loss: -0.259903 | Validation Accuracy: 0.538889
Accuracy on Test data: 0.4308907091617584, 0.18168775737285614
Step 4 | Training Loss: 0.354406 | Validation Accuracy: 0.535714
Accuracy on Test data: 0.4309350550174713, 0.1817721575498581
Step 5 | Training Loss: 0.492913 | Validation Accuracy: 0.550397
Accuracy on Test data: 0.4308907091617584, 0.18168775737285614
Step 6 | Training Loss: -0.709737 | Validation Accuracy: 0.531349
Accuracy on Test data: 0.43080198764801025, 0.18160337209701538
Step 7 | Training Loss: -0.551431 | Validation Accuracy: 0.550794
Accuracy on Test data: 0.43075764179229736, 0.1817721575498581
Step 8 | Training Loss: 1.203854 | Validation Accuracy: 0.547222
Accuracy on Test data: 0.4306689202785492, 0.18160337209701538
Step 9 | Training Loss: -0.394882 | Validation Accuracy: 0.530952
Accuracy on Test data: 0.4307132661342621, 0.1817721575498581
Step 10 | Training Loss: -0.701990 | Validation Accuracy: 0.532143
Accuracy on Test data: 0.43084633350372314, 0.18151898682117462
Step 11 | Training Loss: 1.116959 | Validation Accuracy: 0.529762
Accuracy on Test data: 0.4307132661342621, 0.18168775737285614
Step 12 | Training Loss: 0.369438 | Validation Accuracy: 0.546825
Accuracy on Test data: 0.43075764179229736, 0.18168775737285614
Step 13 | Training Loss: -0.129340 | Validation Accuracy: 0.519841
Accuracy on Test data: 0.43080198764801025, 0.18160337209701538
Step 14 | Training Loss: 1.431088 | Validation Accuracy: 0.549206
Accuracy on Test data: 0.43075764179229736, 0.18160337209701538
Step 15 | Training Loss: 0.842032 | Validation Accuracy: 0.522222
Accuracy on Test data: 0.43075764179229736, 0.1817721575498581
Step 1 | Training Loss: -0.679774 | Validation Accuracy: 0.537302
Accuracy on Test data: 0.43080198764801025, 0.1817721575498581
Step 2 | Training Loss: -0.522323 | Validation Accuracy: 0.539683
Accuracy on Test data: 0.43084633350372314, 0.1817721575498581
Step 3 | Training Loss: -0.378693 | Validation Accuracy: 0.530159
Accuracy on Test data: 0.43084633350372314, 0.18185654282569885
Step 4 | Training Loss: -0.175573 | Validation Accuracy: 0.531349
Accuracy on Test data: 0.4308907091617584, 0.18185654282569885
Step 5 | Training Loss: 1.554441 | Validation Accuracy: 0.523413
Accuracy on Test data: 0.4307132661342621, 0.18160337209701538
Step 6 | Training Loss: 1.894517 | Validation Accuracy: 0.513095
Accuracy on Test data: 0.4307132661342621, 0.18168775737285614
Step 7 | Training Loss: 0.060500 | Validation Accuracy: 0.507143
Accuracy on Test data: 0.4307132661342621, 0.18185654282569885
Step 8 | Training Loss: 2.453114 | Validation Accuracy: 0.526190
Accuracy on Test data: 0.43080198764801025, 0.1817721575498581
Step 9 | Training Loss: 0.496585 | Validation Accuracy: 0.534127
Accuracy on Test data: 0.43075764179229736, 0.18185654282569885
Step 10 | Training Loss: 0.571701 | Validation Accuracy: 0.514286
Accuracy on Test data: 0.4306689202785492, 0.18168775737285614
Step 11 | Training Loss: 0.240536 | Validation Accuracy: 0.528968
Accuracy on Test data: 0.4307132661342621, 0.18151898682117462
Step 12 | Training Loss: -0.065930 | Validation Accuracy: 0.542063
Accuracy on Test data: 0.4307132661342621, 0.18185654282569885
Step 13 | Training Loss: 0.823768 | Validation Accuracy: 0.544048
Accuracy on Test data: 0.43084633350372314, 0.1817721575498581
Step 14 | Training Loss: 0.668088 | Validation Accuracy: 0.545238
Accuracy on Test data: 0.43080198764801025, 0.1819409281015396
Step 15 | Training Loss: 0.552141 | Validation Accuracy: 0.523810
Accuracy on Test data: 0.43084633350372314, 0.18168775737285614

In [12]:
pd.Panel(Train.predictions).to_pickle("dataset/tf_vae_only_nsl_kdd_predictions-.pkl")
pd.Panel(Train.predictions_).to_pickle("dataset/tf_vae_only_nsl_kdd_predictions-__.pkl")

#df_results.to_pickle("dataset/tf_vae_only_nsl_kdd_scores-.pkl")

In [13]:
import numpy as np
import matplotlib.pyplot as plt
import itertools

def plot_confusion_matrix(cm, classes,
                          normalize=False,
                          title='Confusion matrix',
                          cmap=plt.cm.Blues):
    """
    This function prints and plots the confusion matrix.
    Normalization can be applied by setting `normalize=True`.
    """
    np.set_printoptions(precision=4)

    plt.imshow(cm, interpolation='nearest', cmap=cmap)
    plt.title(title)
    plt.colorbar()
    tick_marks = np.arange(len(classes))
    plt.xticks(tick_marks, classes, rotation=45)
    plt.yticks(tick_marks, classes)

    if normalize:
        cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
        #print("Normalized confusion matrix")
    else:
        #print('Confusion matrix, without normalization')
        pass
    
    #print(cm)

    label = [["\n True Negative", "\n False Positive \n Type II Error"],
             ["\n False Negative \n Type I Error", "\n True Positive"]
            ]
    
    thresh = cm.max() / 2.
    for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
        
        plt.text(j, i, "{} {}".format(cm[i, j].round(4), label[i][j]),
                 horizontalalignment="center",
                 color="white" if cm[i, j] > thresh else "black")

    plt.tight_layout()
    plt.ylabel('True label')
    plt.xlabel('Predicted label')

def plot(actual_value, pred_value):
    from sklearn.metrics import confusion_matrix

    cm_2labels = confusion_matrix(y_pred = pred_value, y_true = actual_value)
    plt.figure(figsize=[6,6])
    plot_confusion_matrix(cm_2labels, ['Normal', 'Attack'], normalize = False)

In [14]:
past_scores = pd.read_pickle("dataset/scores/tf_vae_only_nsl_kdd_all-.pkl")

In [15]:
past_scores.sort_values(by='f1_score',ascending=False)


Out[15]:
epoch no_of_features hidden_layers train_score test_score f1_score test_score_20 f1_score_20 time_taken
20 2 1 3 0.462302 0.569242 0.725500 0.818397 0.900130 2.100314
11 13 24 1 0.401190 0.497871 0.637365 0.653587 0.781614 14.581527
12 48 24 1 0.403175 0.498359 0.637265 0.657300 0.784597 54.410407
10 8 24 1 0.424603 0.497782 0.636952 0.661013 0.786682 8.533468
8 2 24 1 0.422222 0.492504 0.633970 0.660675 0.786764 1.280938
9 4 24 1 0.405159 0.493834 0.632957 0.648101 0.777553 3.710555
18 3 122 1 0.403175 0.455554 0.541330 0.524051 0.654073 3.247700
19 4 122 1 0.398413 0.457150 0.540443 0.509958 0.641654 4.821059
32 11 48 3 0.508730 0.539656 0.540227 0.506329 0.620327 24.777366
17 2 122 1 0.379365 0.454134 0.537785 0.520506 0.651753 1.648145
28 2 48 3 0.521032 0.534776 0.535765 0.498228 0.613293 2.517389
31 9 48 3 0.519841 0.538103 0.535652 0.498734 0.612221 19.813704
30 4 48 3 0.519048 0.536285 0.534799 0.498228 0.612285 7.478467
29 3 48 3 0.528571 0.535486 0.533084 0.502363 0.615806 4.963780
16 14 48 1 0.451587 0.467796 0.529453 0.488354 0.610472 27.995775
15 10 48 1 0.443651 0.464691 0.525853 0.485232 0.605178 11.977637
14 3 48 1 0.448810 0.462340 0.524648 0.493249 0.614000 2.737370
13 2 48 1 0.449603 0.455110 0.515309 0.486835 0.608006 1.441661
3 5 12 1 0.508333 0.440960 0.339846 0.322954 0.361379 4.640715
4 7 12 1 0.513889 0.441891 0.339319 0.322025 0.356765 7.055703
7 26 12 1 0.497619 0.445130 0.339162 0.320928 0.361603 30.998132
5 11 12 1 0.507937 0.442246 0.337862 0.326751 0.362474 11.762343
2 3 12 1 0.495238 0.439807 0.336538 0.324557 0.360396 2.358098
6 15 12 1 0.525000 0.442379 0.334833 0.331983 0.366720 16.290812
1 2 12 1 0.518651 0.439274 0.333456 0.324895 0.363361 1.248816
21 2 12 3 0.522222 0.418870 0.076158 0.206076 0.076379 2.193563
22 4 12 3 0.505952 0.420200 0.075797 0.205823 0.078347 6.469548
23 15 12 3 0.512698 0.420600 0.072960 0.205485 0.075601 29.935190
25 7 24 3 0.529365 0.432931 0.028424 0.188608 0.021971 14.112990
26 11 24 3 0.519444 0.433153 0.026214 0.188861 0.023766 23.373540
27 12 24 3 0.537698 0.433419 0.025483 0.187426 0.021940 46.690186
24 2 24 3 0.536905 0.432266 0.023946 0.187764 0.020556 2.533037
35 10 122 3 0.535714 0.430935 0.000623 0.181772 0.000412 47.273161
34 4 122 3 0.540873 0.430891 0.000623 0.181772 0.000412 7.601697
33 2 122 3 0.533333 0.430846 0.000467 0.181688 0.000206 2.623904
0 2 1 1 0.521032 0.430758 0.000000 0.181603 0.000000 1.133690

In [16]:
psg = past_scores.sort_values(by='test_score', ascending=False).groupby(by=['no_of_features', 'hidden_layers'])
psg.first().sort_values(by='test_score', ascending=False)


Out[16]:
epoch train_score test_score f1_score test_score_20 f1_score_20 time_taken
no_of_features hidden_layers
1 3 2 0.462302 0.569242 0.725500 0.818397 0.900130 2.100314
48 3 11 0.508730 0.539656 0.540227 0.506329 0.620327 24.777366
24 1 48 0.403175 0.498359 0.637265 0.657300 0.784597 54.410407
48 1 14 0.451587 0.467796 0.529453 0.488354 0.610472 27.995775
122 1 4 0.398413 0.457150 0.540443 0.509958 0.641654 4.821059
12 1 26 0.497619 0.445130 0.339162 0.320928 0.361603 30.998132
24 3 12 0.537698 0.433419 0.025483 0.187426 0.021940 46.690186
122 3 10 0.535714 0.430935 0.000623 0.181772 0.000412 47.273161
1 1 2 0.521032 0.430758 0.000000 0.181603 0.000000 1.133690
12 3 15 0.512698 0.420600 0.072960 0.205485 0.075601 29.935190

In [17]:
psg.mean().sort_values(by='test_score', ascending=False)


Out[17]:
epoch train_score test_score f1_score test_score_20 f1_score_20 time_taken
no_of_features hidden_layers
1 3 2.000000 0.462302 0.569242 0.725500 0.818397 0.900130 2.100314
48 3 5.800000 0.519444 0.536861 0.535905 0.500776 0.614786 11.910141
24 1 15.000000 0.411270 0.496070 0.635702 0.656135 0.783442 16.503379
48 1 7.250000 0.448413 0.462484 0.523816 0.488418 0.609414 11.038111
122 1 3.000000 0.393651 0.455613 0.539853 0.518172 0.649160 3.238968
12 1 9.857143 0.509524 0.441670 0.337288 0.324870 0.361814 10.622089
24 3 8.000000 0.530853 0.432942 0.026016 0.188165 0.022058 21.677438
122 3 5.333333 0.536640 0.430891 0.000571 0.181744 0.000344 19.166254
1 1 2.000000 0.521032 0.430758 0.000000 0.181603 0.000000 1.133690
12 3 7.000000 0.513624 0.419890 0.074972 0.205795 0.076776 12.866100

In [18]:
Train.predictions = pd.read_pickle("dataset/tf_vae_only_nsl_kdd_predictions-.pkl")
Train.predictions_ = pd.read_pickle("dataset/tf_vae_only_nsl_kdd_predictions-__.pkl")

In [21]:
#epoch_nof_hidden
Train.predictions["2_1_3"].sample()


Out[21]:
Actual Attack_prob Normal_prob Prediction
19593 1.0 0.008749 0.030478 1.0

In [22]:
Train.predictions_["2_1_3"].sample()


Out[22]:
Actual Attack_prob Normal_prob Prediction
1621 1.0 0.000597 0.003845 1.0

In [23]:
df = Train.predictions["2_1_3"].dropna()
df_ = Train.predictions_["2_1_3"].dropna()

In [24]:
from sklearn import metrics as me
def get_score(y_true, y_pred):
    f1 = me.f1_score(y_true, y_pred)
    pre = me.precision_score(y_true, y_pred)
    rec = me.recall_score(y_true, y_pred)
    acc = me.accuracy_score(y_true, y_pred)
    return {"F1 Score":f1, "Precision":pre, "Recall":rec, "Accuracy":acc}

In [25]:
from sklearn import metrics as me

scores = get_score(df.loc[:,'Actual'].values.astype(int),
                df.loc[:,'Prediction'].values.astype(int))
scores.update({"Scenario":"Train+/Test+"})
score_df = pd.DataFrame(scores, index=[0])

scores = get_score(df_.loc[:,'Actual'].values.astype(int),
                df_.loc[:,'Prediction'].values.astype(int))
scores.update({"Scenario":"Train+/Test-"})

score_df = score_df.append(pd.DataFrame(scores, index=[1]))

score_df


Out[25]:
Accuracy F1 Score Precision Recall Scenario
0 0.569242 0.72550 0.569242 1.0 Train+/Test+
1 0.818397 0.90013 0.818397 1.0 Train+/Test-

In [26]:
df.groupby(by="Actual").Actual.count()


Out[26]:
Actual
0.0     9711
1.0    12833
Name: Actual, dtype: int64

In [27]:
plot(actual_value = df.loc[:,'Actual'].values.astype(int),
     pred_value = df.loc[:,'Prediction'].values.astype(int))



In [28]:
df_.groupby(by="Actual").Actual.count()


Out[28]:
Actual
0.0    2152
1.0    9698
Name: Actual, dtype: int64

In [29]:
plot(actual_value = df_.loc[:,'Actual'].values.astype(int),
     pred_value = df_.loc[:,'Prediction'].values.astype(int))



In [30]:
from scipy import stats

def fn(x):
    #print(x)
    return stats.norm.interval(0.95, loc=x.f1_score.mean(), scale=x.f1_score.std())
psg.apply(fn)


Out[30]:
no_of_features  hidden_layers
1               1                                            (nan, nan)
                3                                            (nan, nan)
12              1                      (0.332501487048, 0.342074653086)
                3                    (0.0715380594206, 0.0784052738095)
24              1                      (0.631624957331, 0.639778869737)
                3                    (0.0223658966078, 0.0296668834749)
48              1                        (0.51200267417, 0.53562894811)
                3                      (0.530724761885, 0.541085791068)
122             1                      (0.536237511327, 0.543468428541)
                3                (0.000394975978807, 0.000747522364523)
dtype: object

In [ ]:


In [ ]: