15
15
from sklearn .model_selection import train_test_split
16
16
17
17
import joblib
18
+ import numpy as np
18
19
19
20
# This module is based on the implementation by Alessandro Erba, original is found here:
20
21
# https://github.com/scy-phy/ICS-Evasion-Attacks/blob/master/Adversarial_Attacks/Black_Box_Attack/adversarial_AE.py
@@ -72,23 +73,22 @@ def load_scaler(self, scaler_path):
72
73
print ('Scaler loaded' )
73
74
74
75
# Saves the model and the scaler used to train the model
75
- def save_model (self , filename ):
76
- print ('saving trained model at: ' , str (filename ))
77
- self .generator .save (str (model_path ))
76
+ def save_model (self , model_filename , scaler_filename ):
77
+ print ('saving trained model at: ' , str (model_filename ))
78
+ self .generator .save (str (model_filename ))
78
79
79
- scaler_path = Path .cwd ()
80
- print ('saved scaler model at: ' , filename )
81
- joblib .dump (self .attacker_scaler , 'ctown_attacker_scaler.gz' )
80
+ print ('saved scaler model at: ' , scaler_filename )
81
+ joblib .dump (self .attacker_scaler , scaler_filename )
82
82
83
83
def init_generator (self , training_path ):
84
84
# Load and preprocess training data
85
- training_path = Path (__file__ ).parent / training_path / 'training_data.csv'
85
+ #training_path = Path(__file__).parent/training_path/'training_data.csv'
86
+ training_path = Path (__file__ ).parent / training_path / 'ground_truth_dataset.csv'
86
87
# print('Reading training data from: ' + str(training_path))
87
88
self .physical_pd = self .preprocess_physical (training_path )
88
89
89
90
# Adversarial model for concealment
90
- # toDo: Ask about this parameter
91
- hide_layers = 39
91
+ hide_layers = 160
92
92
self .hide_layers = hide_layers
93
93
self .generator_layers = [self .feature_dims ,
94
94
int (self .hide_layers / 2 ),
@@ -130,14 +130,19 @@ def fix_sample(self, gen_examples):
130
130
return gen_examples
131
131
132
132
def predict (self , received_values_df ):
133
- print ('Attempting to predict concealment values' )
133
+ # print('Attempting to predict concealment values')
134
134
# print('Features received to predict: ' + str(received_values_df.columns))
135
135
# print('Features received to train: ' + str(self.sensor_cols))
136
136
137
137
gen_examples = self .generator .predict (self .attacker_scaler .transform (received_values_df ))
138
+ #print('nan predicted values: ')
139
+ # print(gen_examples)
140
+ #print(np.isnan(gen_examples))
138
141
gen_examples = self .fix_sample (pd .DataFrame (columns = self .sensor_cols ,
139
142
data = self .attacker_scaler .inverse_transform (gen_examples )))
140
143
144
+ #print('Model fixed values')
145
+ #print(gen_examples)
141
146
return gen_examples
142
147
143
148
def __init__ (self , features_list ):
@@ -146,3 +151,4 @@ def __init__(self, features_list):
146
151
self .sensor_cols = [col for col in features_list if
147
152
col not in ['Unnamed: 0' , 'iteration' , 'timestamp' , 'Attack' ]]
148
153
self .feature_dims = len (self .sensor_cols )
154
+ print (f'Model has { self .feature_dims } input features' )
0 commit comments