def test(self): if not os.path.exists(FileManager.getTrainedModelFileUrl(self.type)): raise Exception('You can\'t test a model without training it') # label encoder Y_Encoder = preprocessing.LabelEncoder() Y_Encoder.fit(ConfigurationManager.getLanguages()) # preparing features X, languages = self.__prepareFeatures('testing', True) # import trained model self.importScikitTrainedModel() # make predictions Y_real = Y_Encoder.transform(languages) Y_predicted = self.model.predict(X) # metrics accuracy = accuracy_score(Y_real, Y_predicted) report = classification_report(Y_real, Y_predicted, target_names=Y_Encoder.classes_) print(' > [BAYES] classification report exported!') print(' > [BAYES] total accuracy = ' + str(float("{:.2f}".format(accuracy)) * 100) + '%') # export the classification report self.exportClassificationReport(str(report)) return self
def train(self): # check if a trained model already exists if os.path.exists(FileManager.getTrainedModelFileUrl(self.type)): return self # configs batch_size: int = self.config['batch_size'] epochs: int = self.config['epochs'] # preparing features X, Y = self.__prepareFeatures('training', False) # Y dummies encoding Y = pd.get_dummies(Y) # prepare model self.__prepareModel(X, Y) # set early stopping monitor so the model stops training when it won't improve anymore early_stopping_monitor = EarlyStopping(monitor='loss', patience=3) # training history = self.model.fit(X, Y, batch_size, epochs, verbose=1, callbacks=[early_stopping_monitor]) print('\n' + str(self.model.summary())) # export the trained model self.exportKerasTrainedModel() return self
def train(self): if os.path.exists(FileManager.getTrainedModelFileUrl(self.type)): return self # preparing features X, languages = self.__prepareFeatures('training', False) # label encoder Y_Encoder = preprocessing.LabelEncoder() Y_Encoder.fit(ConfigurationManager.getLanguages()) # (X, Y) creation Y = Y_Encoder.transform(languages) # prepare model self.__prepareModel() # training self.model.fit(X, Y) # export the trained model self.exportScikitTrainedModel() return self
def test(self): if not os.path.exists(FileManager.getTrainedModelFileUrl(self.type)): raise Exception('You can\'t test a model without training it.') batch_size: int = self.config['batch_size'] # preparing features X, Y = self.__prepareFeatures('testing', True) # import trained model self.importKerasTrainedModel() # make predictions Y_real = pd.get_dummies(Y) Y_predicted = self.model.predict(X, batch_size=batch_size) target_names = Y_real.columns.tolist() Y_real_binary_list = np.argmax(Y_real.values.tolist(), axis=1) Y_predicted_binary_list = np.argmax(Y_predicted, axis=1) # metrics loss, accuracy = self.model.evaluate(X, Y_real, verbose=0, batch_size=batch_size) report = classification_report(Y_real_binary_list, Y_predicted_binary_list, target_names=target_names) print(' > [CNN] classification report exported!') print(' > [CNN] total accuracy = ' + str(float("{:.2f}".format(accuracy)) * 100) + '%') # export the classification report self.exportClassificationReport(str(report)) return self
def exportScikitTrainedModel(self): joblib.dump(self.model, FileManager.getTrainedModelFileUrl(self.type)) return self
def exportKerasTrainedModel(self): self.model.save(FileManager.getTrainedModelFileUrl(self.type)) return self
def importScikitTrainedModel(self): self.model = joblib.load(FileManager.getTrainedModelFileUrl(self.type)) return self
def importKerasTrainedModel(self): self.model = load_model(FileManager.getTrainedModelFileUrl(self.type)) return self