matrix-spam-ml

git clone git://archive.git.mtrnord.blog/MTRNord/matrix-spam-ml.git
Log | Files | Refs | Submodules | README | LICENSE

commit 71d635f2bb7a89665a0e7f4964accd92393499fc
parent de1869929bb860e6ba00520bd523083d37319e10
Author: MTRNord <mtrnord1@gmail.com>
Date:   Wed, 23 Nov 2022 21:31:00 +0100

Fixup model py

Diffstat:
Mmodel_v2.py | 100++++++++++++++++++++++---------------------------------------------------------
1 file changed, 27 insertions(+), 73 deletions(-)

diff --git a/model_v2.py b/model_v2.py @@ -43,16 +43,8 @@ progress_bar = tf.keras.callbacks.ProgbarLogger() class SpamDectionModel(tf.keras.Model): - def __init__(self, vectorize_layer, hp_embedding_dim, hp_dense1, hp_dropout, hp_l2): + def __init__(self, hp_dense1, hp_dropout, hp_l2): super(SpamDectionModel, self).__init__() - # self.vectorize_layer = vectorize_layer - # self.embedding = tf.keras.layers.Embedding( - # input_dim=len(vectorize_layer.get_vocabulary()) + 1, - # output_dim=hp_embedding_dim, - # name="text_input", - # embeddings_initializer="uniform", - # # mask_zero=True, - # ) self.dropout = tf.keras.layers.Dropout( hp_dropout, ) @@ -75,9 +67,6 @@ class SpamDectionModel(tf.keras.Model): @tf.function def call(self, x, training=False): - # x = self.vectorize_layer(x) - # x = self.embedding(x) - # x = self.glob_average_pooling_1d(x) x = self.use_layer(x) if training: x = self.dropout(x, training=training) @@ -88,22 +77,16 @@ class SpamDectionModel(tf.keras.Model): class SpamDectionHyperModel(kt.HyperModel): - def __init__(self, vectorize_layer): + def __init__(self): super(SpamDectionHyperModel, self).__init__() - self.vectorize_layer = vectorize_layer def build(self, hp): # Tune the number of units in the first Dense layer # Choose an optimal value between 6-512 hp_dense1 = hp.Int("dense1", min_value=6, max_value=512, step=12) - hp_embedding_dim = hp.Int( - "embedding_dim", min_value=300, max_value=512, step=16 - ) hp_dropout = hp.Float("dropout", min_value=0.1, max_value=0.9, step=0.1) hp_l2 = hp.Float("l2", min_value=0.0001, max_value=0.001, step=0.0001) model = SpamDectionModel( - self.vectorize_layer, - hp_embedding_dim + 1, hp_dense1, hp_dropout, hp_l2, @@ -152,25 +135,6 @@ def remove_stopwords(input_text): def change_labels(x): return 1 if x == "spam" else 0 - -def tokenize_data(data): - vectorize_layer = tf.keras.layers.TextVectorization( - max_tokens=vocab_size, - output_mode="int", - standardize="lower_and_strip_punctuation", - ) - - # Now that the vocab layer has been created, call `adapt` on the text-only - # dataset to create the vocabulary. You don't have to batch, but for large - # datasets this means we're not keeping spare copies of the dataset. - vectorize_layer.adapt(data) - - # vocab = np.array(vectorize_layer.get_vocabulary()) - # print(f"First 20 of Vocab: {vocab[:20]}") - - return vectorize_layer - - def load_data(): data = pd.read_csv( "./input/MatrixData.tsv", sep="\t", quoting=csv.QUOTE_NONE, encoding="utf-8" @@ -206,9 +170,7 @@ def load_data(): training_labels_final = np.array(training_labels) training_sentences_final = np.array(training_sentences) testing_sentences_final = np.array(testing_sentences) - vectorize_layer = tokenize_data(sentences) return ( - vectorize_layer, training_sentences_final, testing_sentences_final, training_labels_final, @@ -249,17 +211,14 @@ def train_hyperparamters( def train_model( - vectorize_layer, training_sentences_final, testing_sentences_final, training_labels_final, testing_labels_final, - # best_hps, - # tuner, + best_hps, + tuner, ): model = SpamDectionModel( - vectorize_layer, - 0, 64, 0.2, 0, @@ -270,7 +229,7 @@ def train_model( metrics=["accuracy"], ) num_epochs = 200 - # model = tuner.hypermodel.build(best_hps) + model = tuner.hypermodel.build(best_hps) history = model.fit( training_sentences_final, training_labels_final, @@ -286,8 +245,6 @@ def train_model( print("Average test loss: ", np.average(history.history["val_loss"])) model = SpamDectionModel( - vectorize_layer, - 0, 64, 0.2, 0, @@ -297,8 +254,8 @@ def train_model( optimizer=tf.keras.optimizers.Adam(), metrics=["accuracy"], ) - # hypermodel = tuner.hypermodel.build(best_hps) - hypermodel_history = model.fit( + hypermodel = tuner.hypermodel.build(best_hps) + hypermodel_history = hypermodel.fit( training_sentences_final, training_labels_final, verbose=1, @@ -310,7 +267,6 @@ def train_model( # filepath=checkpoint_prefix, save_weights_only=True # ), progress_bar - # es_callback ], ) @@ -326,7 +282,7 @@ def train_model( return model -def test_model(vectorize_layer, model): +def test_model(model): # Use the model to predict whether a message is spam text_messages = [ "Greg, can you call me back once you get this?", @@ -400,39 +356,37 @@ def main(): print("TensorFlow version:", tf.__version__) print("[Step 1/6] Loading data") ( - vectorize_layer, training_sentences_final, testing_sentences_final, training_labels_final, testing_labels_final, ) = load_data() - # model = SpamDectionHyperModel(vectorize_layer) - # tuner = kt.Hyperband( - # model, - # objective="val_accuracy", - # max_epochs=100, - # directory="hyper_tuning", - # project_name="spam-keras", - # ) - # print("[Step 3/6] Tuning hypervalues") - # best_hps = train_hyperparamters( - # training_sentences_final, - # testing_sentences_final, - # training_labels_final, - # testing_labels_final, - # tuner, - # ) + model = SpamDectionHyperModel() + tuner = kt.Hyperband( + model, + objective="val_accuracy", + max_epochs=100, + directory="hyper_tuning", + project_name="spam-keras", + ) + print("[Step 3/6] Tuning hypervalues") + best_hps = train_hyperparamters( + training_sentences_final, + testing_sentences_final, + training_labels_final, + testing_labels_final, + tuner, + ) print("[Step 4/6] Training model") model = train_model( - vectorize_layer, training_sentences_final, testing_sentences_final, training_labels_final, testing_labels_final, - # best_hps, - # tuner, + best_hps, + tuner, ) print("[Step 5/6] Saving model") @@ -442,7 +396,7 @@ def main(): model.save(export_path) print("[Step 6/6] Testing model") - test_model(vectorize_layer, model) + test_model(model) if __name__ == "__main__":