@ -29,12 +29,14 @@ from pandas import DataFrame
from sklearn . metrics import precision_score , recall_score , f1_score , confusion_matrix
from sklearn . metrics import precision_score , recall_score , f1_score , confusion_matrix
from tensorflow . keras . models import Sequential
from tensorflow . keras . models import Sequential
from tensorflow . keras . layers import Dense , Activation
from tensorflow . keras . layers import Dense , Activation
from tensorflow . keras . callbacks import Callback
visual = True
visual = True
verbose_show = False
verbose_show = False
# generate 2d classification dataset
# generate 2d classification dataset
def datagen ( x_c , y_c , n_samples , n_features ) :
def datagen ( x_c , y_c , n_samples , n_features ) :
@ -91,8 +93,27 @@ class EarlyStoppingOnValue(tensorflow.keras.callbacks.Callback):
)
)
return monitor_value
return monitor_value
class VerboseEveryNEpochs ( Callback ) :
def __init__ ( self , every_n_epochs = 1000 , verbose = 1 ) :
super ( ) . __init__ ( )
self . every_n_epochs = every_n_epochs
self . verbose = verbose
def on_epoch_end ( self , epoch , logs = None ) :
if ( epoch + 1 ) % self . every_n_epochs == 0 :
if self . verbose :
print ( f " \n Epoch { epoch + 1 } / { self . params [ ' epochs ' ] } " )
if logs :
log_str = " , " . join ( [ f " { k } : { v : .4f } " for k , v in logs . items ( ) ] )
print ( f " - { log_str } " )
#создание и обучение модели автокодировщика
#создание и обучение модели автокодировщика
def create_fit_save_ae ( cl_train , ae_file , irefile , epohs , verbose_show , patience ) :
def create_fit_save_ae ( cl_train , ae_file , irefile , epohs , verbose_show , patience , * * kwargs ) :
verbose_every_n_epochs = kwargs . get ( ' verbose_every_n_epochs ' , 1000 )
early_stopping_delta = kwargs . get ( ' early_stopping_delta ' , 0.01 )
early_stopping_value = kwargs . get ( ' early_stopping_value ' , 0.0001 )
size = cl_train . shape [ 1 ]
size = cl_train . shape [ 1 ]
#ans = '2'
#ans = '2'
@ -140,22 +161,28 @@ def create_fit_save_ae(cl_train, ae_file, irefile, epohs, verbose_show, patience
optimizer = tensorflow . keras . optimizers . Adam ( learning_rate = 0.001 , beta_1 = 0.9 , beta_2 = 0.999 , amsgrad = False )
optimizer = tensorflow . keras . optimizers . Adam ( learning_rate = 0.001 , beta_1 = 0.9 , beta_2 = 0.999 , amsgrad = False )
ae . compile ( loss = ' mean_squared_error ' , optimizer = optimizer )
ae . compile ( loss = ' mean_squared_error ' , optimizer = optimizer )
error_stop = 0.0001
epo = epohs
epo = epohs
early_stopping_callback_on_error = EarlyStoppingOnValue ( monitor = ' loss ' , baseline = error_stop )
verbose = 1 if verbose_show else 0
early_stopping_callback_on_error = EarlyStoppingOnValue ( monitor = ' loss ' , baseline = early_stopping_value )
early_stopping_callback_on_improving = tensorflow . keras . callbacks . EarlyStopping ( monitor = ' loss ' ,
early_stopping_callback_on_improving = tensorflow . keras . callbacks . EarlyStopping ( monitor = ' loss ' ,
min_delta = 0.0001 , patience = patience ,
min_delta = early_stopping_delta , patience = patience ,
verbose = 1 , mode = ' auto ' ,
verbose = verbose , mode = ' min ' ,
baseline = None ,
baseline = None ,
restore_best_weights = Fals e)
restore_best_weights = Tru e)
history_callback = tensorflow . keras . callbacks . History ( )
history_callback = tensorflow . keras . callbacks . History ( )
verbose = 1 if verbose_show else 0
history_object = ae . fit ( cl_train , cl_train ,
history_object = ae . fit ( cl_train , cl_train ,
batch_size = cl_train . shape [ 0 ] ,
batch_size = cl_train . shape [ 0 ] ,
epochs = epo ,
epochs = epo ,
callbacks = [ early_stopping_callback_on_error , history_callback ,
callbacks = [
early_stopping_callback_on_improving ] ,
early_stopping_callback_on_error ,
history_callback ,
early_stopping_callback_on_improving ,
VerboseEveryNEpochs ( every_n_epochs = verbose_every_n_epochs ) ,
] ,
verbose = verbose )
verbose = verbose )
ae_trainned = ae
ae_trainned = ae
ae_pred = ae_trainned . predict ( cl_train )
ae_pred = ae_trainned . predict ( cl_train )
@ -538,4 +565,4 @@ def ire_plot(title, IRE_test, IREth, ae_name):
plt . gcf ( ) . savefig ( ' out/IRE_ ' + title + ae_name + ' .png ' )
plt . gcf ( ) . savefig ( ' out/IRE_ ' + title + ae_name + ' .png ' )
plt . show ( )
plt . show ( )
return
return