Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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
Example #5
0
 def exportScikitTrainedModel(self):
     joblib.dump(self.model, FileManager.getTrainedModelFileUrl(self.type))
     return self
Example #6
0
 def exportKerasTrainedModel(self):
     self.model.save(FileManager.getTrainedModelFileUrl(self.type))
     return self
Example #7
0
 def importScikitTrainedModel(self):
     self.model = joblib.load(FileManager.getTrainedModelFileUrl(self.type))
     return self
Example #8
0
 def importKerasTrainedModel(self):
     self.model = load_model(FileManager.getTrainedModelFileUrl(self.type))
     return self