# !pip install --upgrade tensorflow
!nvidia-smi
Sun Nov 5 15:14:39 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 48C P0 28W / 70W | 883MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
The 20 newsgroups dataset comprises around 18000 newsgroups posts on 20 topics split in two subsets: one for training (or development) and the other one for testing (or for performance evaluation). The split between the train and test set is based upon a messages posted before and after a specific date.
from sklearn.datasets import fetch_20newsgroups
twenty_train = fetch_20newsgroups(subset='train') #, remove=('headers', 'footers', 'quotes'))
twenty_test = fetch_20newsgroups(subset='test')
print("Catergories")
print(twenty_train.target_names)
print("-------------")
print("First dataset's sample")
print("\n".join(twenty_train.data[0].split("\n")))
print("------------")
print("First dataset's sample category: ",twenty_train.target[0])
Catergories ['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc'] ------------- First dataset's sample From: lerxst@wam.umd.edu (where's my thing) Subject: WHAT car is this!? Nntp-Posting-Host: rac3.wam.umd.edu Organization: University of Maryland, College Park Lines: 15 I was wondering if anyone out there could enlighten me on this car I saw the other day. It was a 2-door sports car, looked to be from the late 60s/ early 70s. It was called a Bricklin. The doors were really small. In addition, the front bumper was separate from the rest of the body. This is all I know. If anyone can tellme a model name, engine specs, years of production, where this car is made, history, or whatever info you have on this funky looking car, please e-mail. Thanks, - IL ---- brought to you by your neighborhood Lerxst ---- ------------ First dataset's sample category: 7
from sklearn.model_selection import train_test_split
X_train, X_val, y_train, y_val = train_test_split(twenty_train.data, twenty_train.target, test_size=0.3, random_state=12547392)
X_test, y_test = twenty_test.data, twenty_test.target
# keep only the first 3k samples
X_test, y_test = X_test[:3000], y_test[:3000]
print('Train samples: {}'.format(len(X_train)))
print('Val samples: {}'.format(len(X_val)))
print('Test samples: {}'.format(len(X_test)))
Train samples: 7919 Val samples: 3395 Test samples: 3000
import spacy
from spacy.lang.en.stop_words import STOP_WORDS
nlp = spacy.load('en_core_web_sm', disable=["tagger", "parser","ner"])
nlp.add_pipe('sentencizer')
def tokenize_samples(samples):
tokenized_samples = []
for i in range(len(samples)):
doc = nlp(samples[i]) # Tokenize the sample into sentences
tokens = []
for sent in doc.sents:
for tok in sent: # Iterate through the words of the sentence
if '\n' in tok.text or "\t" in tok.text or "--" in tok.text or "*" in tok.text or tok.text.lower() in STOP_WORDS:
continue
if tok.text.strip():
tokens.append(tok.text.replace('"',"'").strip())
tokenized_samples.append(tokens)
return tokenized_samples
X_train_tokenized = tokenize_samples(X_train)
X_val_tokenized = tokenize_samples(X_val)
/usr/local/lib/python3.10/dist-packages/spacy/pipeline/lemmatizer.py:211: UserWarning: [W108] The rule-based lemmatizer did not find POS annotation for one or more tokens. Check that your pipeline includes components that assign token.pos, typically 'tagger'+'attribute_ruler' or 'morphologizer'. warnings.warn(Warnings.W108)
X_test_tokenized = tokenize_samples(X_test)
for item in X_train_tokenized[:2]:
print(item, '\n')
[':', 'kastle@wpi', '.', 'WPI.EDU', '(', 'Jacques', 'W', 'Brouillette', ')', 'Subject', ':', ':', 'WARNING', '.....', '(please', 'read', ')', '...', 'Organization', ':', 'Worcester', 'Polytechnic', 'Institute', 'Lines', ':', '8', 'Distribution', ':', 'world', 'NNTP', '-', 'Posting', '-', 'Host', ':', 'wpi.wpi.edu', 'Keywords', ':', 'BRICK', ',', 'TRUCK', ',', 'DANGER', 'plase', 'cease', 'discussion', '.', 'fail', 'people', 'feel', 'need', 'expound', 'issue', 'days', 'days', 'end', '.', 'areas', 'meant', 'type', 'discussion', '.', 'feel', 'need', 'things', ',', 'thought', '.', 'Thanks', '.', ':', 'want', 'things', 'world', ',', '58', 'Plymouth', 'small', ':', ':', 'OPEC', 'nation', 'fuel', '.', 'good', ':', ':', 'thing', '.', 'Car', 'Smashers', 'home', 'sulk', '.', ':', ':', 'Jacques', 'Brouillette', 'Manufacturing', 'Engineering', ':']
[':', 'hallam@dscomsa.desy.de', '(', 'Phill', 'Hallam', '-', 'Baker', ')', 'Subject', ':', ':', 'Tories', 'win', "'", "lottery'", '...', 'Clinton', 'GST', '?', 'Lines', ':', '42', 'Reply', '-', ':', 'hallam@zeus02.desy.de', 'Organization', ':', 'DESYDeutsches', 'Elektronen', 'Synchrotron', ',', 'Experiment', 'ZEUS', 'bei', 'HERA', 'article', '<', '1993Apr15.053553.16427@news.columbia.edu', '>', ',', 'gld@cunixb.cc.columbia.edu', '(', 'Gary', 'L', 'Dare', ')', 'writes', ':', '|>cmk@world.std.com', '(', 'Charles', 'M', 'Kozierok', ')', 'writes', ':', '|>>gld@cunixb.cc.columbia.edu', '(', 'Gary', 'L', 'Dare', ')', 'writes', ':', '|', '>', '>', '}', '|', '>', '>', '}', 'Secondly', ',', 'Canadian', 'worked', 'participates', '|', '>', '>', '}', 'insurance', '(', 'negative', 'option', ',', 'explicitly', 'decline', '|', '>', '>', '}', ')', 'knows', 'premium', 'deducted', 'separately', '...', '|', '>', '>', '|>>yes', ',', 'Americans', 'actually', 'problem', 'having', '|>>of', 'money', 'taken', 'pay', "'", 'health', 'care', '...', '|', '>', '|>But', 'note', ',', 'Canadian', 'German', 'health', 'insurance', 'voluntary', 'true', '.', 'required', 'insurance', 'law', '.', 'method', 'collection', 'effectively', 'makes', 'tax', '.', '|', '>', '...', 'like', "'", 'basic', 'plus', "'", 'cable', ',', 'tell', '|>want', '...', 'example', ',', 'Hutterite', 'colonies', 'western', 'Canada', '|>part', '(', 'Mennon', 'Hutter', 'fundamentalist', 'Protestants', '|>Germany', 'followers', 'left', 'New', 'World', '...', 'Mennonites', '|>very', 'diverse', 'lot', 'Hutterites', 'similiar', 'Amish', ')', '.', '|>American', 'idea', 'floated', 'today', 'gives', 'option', 'live', '|>off', 'land', '...', '|', '>', '|>>the', 'selfish', 'bastards', '.', 'unfortunately', ',', 'number', '|>>diminished', 'recently', ',', 'President', 'Pinocchio', 'gets', '|>>with', ',', 'hope', 'reversal', 'trend', '.', 'right', 'hoping', 'selfish', 'bastards', '.', 'Pity', 'look', '12', 'years', 'Regan', '/', 'Bush', "'", 'selfish', 'Bastard', "'", 'ecconomy', 'country', '.', 'Elect', 'selfish', 'bastard', 'government', 'run', 'country', ',', 's', 'selfish', 'bastards', '.', 'Bush', 'Regan', 'gave', 'tax', 'breaks', 'ultra', 'rich', 'paid', 'borrowing', 'incomes', 'middle', 'class', '.', 'Phill', 'Hallam', '-', 'Baker']
from sklearn.feature_extraction.text import TfidfVectorizer
# Use unigram & bi-gram tf*idf features
# Apply sublinear tf scaling, i.e. replace tf with 1 + log(tf).
vectorizer = TfidfVectorizer(ngram_range=(1, 2), max_features = 5000, sublinear_tf=True)
X_train_tfidf = vectorizer.fit_transform([" ".join(x) for x in X_train_tokenized])
X_val_tfidf = vectorizer.transform([" ".join(x) for x in X_val_tokenized])
X_test_tfidf = vectorizer.transform([" ".join(x) for x in X_test_tokenized])
print(X_train_tfidf.shape)
(7919, 5000)
# Reduce dimensionality using svd 5000 --> 500
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(n_components=500, random_state=4321)
X_train_svd = svd.fit_transform(X_train_tfidf)
X_val_svd = svd.transform(X_val_tfidf)
X_test_svd = svd.transform(X_test_tfidf)
from sklearn.preprocessing import LabelBinarizer
lb = LabelBinarizer()
target_list = twenty_train.target_names
y_train_1_hot = lb.fit_transform([target_list[x] for x in y_train])
y_val_1_hot = lb.transform([target_list[x] for x in y_val])
print('y_train_1_hot[0]: {}'.format(y_train_1_hot[0]))
y_train_1_hot[0]: [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
import numpy as np
import os
import tensorflow as tf
from sklearn.metrics import f1_score, recall_score, precision_score
class Metrics(tf.keras.callbacks.Callback):
def __init__(self, valid_data):
super(Metrics, self).__init__()
self.validation_data = valid_data
def on_epoch_end(self, epoch, logs=None):
logs = logs or {}
val_predict = np.argmax(self.model.predict(self.validation_data[0]), -1)
val_targ = self.validation_data[1]
if len(val_targ.shape) == 2 and val_targ.shape[1] != 1:
val_targ = np.argmax(val_targ, -1)
val_targ = tf.cast(val_targ,dtype=tf.float32)
_val_f1 = f1_score(val_targ, val_predict,average="weighted")
_val_recall = recall_score(val_targ, val_predict,average="weighted")
_val_precision = precision_score(val_targ, val_predict,average="weighted")
logs['val_f1'] = _val_f1
logs['val_recall'] = _val_recall
logs['val_precision'] = _val_precision
print(" — val_f1: %f — val_precision: %f — val_recall: %f" % (_val_f1, _val_precision, _val_recall))
return
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
clf = LogisticRegression(solver="liblinear")
clf.fit(X_train_svd, y_train)
predictions = clf.predict(X_val_svd)
print(classification_report(y_val, predictions, target_names=twenty_train.target_names))
precision recall f1-score support
alt.atheism 0.95 0.81 0.87 160
comp.graphics 0.66 0.78 0.71 165
comp.os.ms-windows.misc 0.82 0.82 0.82 189
comp.sys.ibm.pc.hardware 0.67 0.71 0.69 168
comp.sys.mac.hardware 0.81 0.74 0.78 182
comp.windows.x 0.87 0.85 0.86 168
misc.forsale 0.79 0.80 0.79 182
rec.autos 0.84 0.84 0.84 181
rec.motorcycles 0.93 0.91 0.92 184
rec.sport.baseball 0.86 0.91 0.89 169
rec.sport.hockey 0.91 0.93 0.92 175
sci.crypt 0.97 0.92 0.94 177
sci.electronics 0.72 0.75 0.73 173
sci.med 0.88 0.90 0.89 181
sci.space 0.86 0.88 0.87 181
soc.religion.christian 0.78 0.92 0.84 177
talk.politics.guns 0.91 0.93 0.92 177
talk.politics.mideast 0.94 0.95 0.94 170
talk.politics.misc 0.87 0.76 0.81 135
talk.religion.misc 0.69 0.47 0.56 101
accuracy 0.84 3395
macro avg 0.84 0.83 0.83 3395
weighted avg 0.84 0.84 0.84 3395
from sklearn.metrics import accuracy_score
predictions = clf.predict(X_val_svd)
print(f'Validation Accuracy: {accuracy_score(y_val, predictions)*100:.2f}%')
predictions = clf.predict(X_test_svd)
print(f'Test Accuracy:{accuracy_score(y_test, predictions)*100:.2f}%')
Validation Accuracy: 83.74% Test Accuracy:76.83%
import time
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
with tf.device('/device:GPU:0'):
model = Sequential()
model.add(Dense(512, input_dim=X_train_svd.shape[1] , activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(len(twenty_train.target_names), activation='softmax'))
print(model.summary())
#Configures the model for training.
#CategoricalCrossentropy: Computes the crossentropy loss between the labels and predictions.
model.compile(
loss='categorical_crossentropy',
optimizer=Adam(lr=0.001),
metrics=["accuracy"]
)
if not os.path.exists('./checkpoints'):
os.makedirs('./checkpoints')
# Callback to save the Keras model or model weights at some frequency.
checkpoint = ModelCheckpoint(
'checkpoints/weights.hdf5',
monitor='val_accuracy',
mode='max',
verbose=2,
save_best_only=True,
save_weights_only=True
)
start_training_time = time.time()
history = model.fit(
X_train_svd,
y_train_1_hot,
validation_data=(X_val_svd, y_val_1_hot),
batch_size=256,
epochs=100,
shuffle=True,
callbacks=[Metrics(valid_data=(X_val_svd, y_val_1_hot)), checkpoint]
)
end_training_time = time.time()
print(f'\nTraining time: {time.strftime("%H:%M:%S", time.gmtime(end_training_time - start_training_time))} sec\n')
Model: "sequential_4"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_16 (Dense) (None, 512) 256512
dropout_6 (Dropout) (None, 512) 0
dense_17 (Dense) (None, 256) 131328
dropout_7 (Dropout) (None, 256) 0
dense_18 (Dense) (None, 20) 5140
=================================================================
Total params: 392980 (1.50 MB)
Trainable params: 392980 (1.50 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
WARNING:absl:`lr` is deprecated in Keras optimizer, please use `learning_rate` or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.Adam.
None Epoch 1/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.559742 — val_precision: 0.674319 — val_recall: 0.575847 Epoch 1: val_accuracy improved from -inf to 0.57585, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 2s 25ms/step - loss: 2.9442 - accuracy: 0.1605 - val_loss: 2.8328 - val_accuracy: 0.5758 - val_f1: 0.5597 - val_recall: 0.5758 - val_precision: 0.6743 Epoch 2/100 29/31 [===========================>..] - ETA: 0s - loss: 2.5840 - accuracy: 0.4403
/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1344: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior. _warn_prf(average, modifier, msg_start, len(result))
107/107 [==============================] - 0s 2ms/step — val_f1: 0.736580 — val_precision: 0.802767 — val_recall: 0.751399 Epoch 2: val_accuracy improved from 0.57585 to 0.75140, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 2.5608 - accuracy: 0.4464 - val_loss: 2.0737 - val_accuracy: 0.7514 - val_f1: 0.7366 - val_recall: 0.7514 - val_precision: 0.8028 Epoch 3/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.823097 — val_precision: 0.833330 — val_recall: 0.825920 Epoch 3: val_accuracy improved from 0.75140 to 0.82592, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 0s 16ms/step - loss: 1.6315 - accuracy: 0.6620 - val_loss: 1.0794 - val_accuracy: 0.8259 - val_f1: 0.8231 - val_recall: 0.8259 - val_precision: 0.8333 Epoch 4/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.834677 — val_precision: 0.840007 — val_recall: 0.835346 Epoch 4: val_accuracy improved from 0.82592 to 0.83535, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 0s 16ms/step - loss: 0.9470 - accuracy: 0.7754 - val_loss: 0.7102 - val_accuracy: 0.8353 - val_f1: 0.8347 - val_recall: 0.8353 - val_precision: 0.8400 Epoch 5/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.848076 — val_precision: 0.851958 — val_recall: 0.848306 Epoch 5: val_accuracy improved from 0.83535 to 0.84831, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 0.6898 - accuracy: 0.8151 - val_loss: 0.5886 - val_accuracy: 0.8483 - val_f1: 0.8481 - val_recall: 0.8483 - val_precision: 0.8520 Epoch 6/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.857407 — val_precision: 0.859264 — val_recall: 0.857437 Epoch 6: val_accuracy improved from 0.84831 to 0.85744, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 0s 16ms/step - loss: 0.5630 - accuracy: 0.8466 - val_loss: 0.5319 - val_accuracy: 0.8574 - val_f1: 0.8574 - val_recall: 0.8574 - val_precision: 0.8593 Epoch 7/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.854769 — val_precision: 0.858787 — val_recall: 0.853314 Epoch 7: val_accuracy did not improve from 0.85744 31/31 [==============================] - 1s 19ms/step - loss: 0.4981 - accuracy: 0.8616 - val_loss: 0.5068 - val_accuracy: 0.8533 - val_f1: 0.8548 - val_recall: 0.8533 - val_precision: 0.8588 Epoch 8/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.858726 — val_precision: 0.861942 — val_recall: 0.857732 Epoch 8: val_accuracy improved from 0.85744 to 0.85773, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 0.4398 - accuracy: 0.8771 - val_loss: 0.4850 - val_accuracy: 0.8577 - val_f1: 0.8587 - val_recall: 0.8577 - val_precision: 0.8619 Epoch 9/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.857633 — val_precision: 0.860739 — val_recall: 0.856848 Epoch 9: val_accuracy did not improve from 0.85773 31/31 [==============================] - 1s 19ms/step - loss: 0.4014 - accuracy: 0.8823 - val_loss: 0.4780 - val_accuracy: 0.8568 - val_f1: 0.8576 - val_recall: 0.8568 - val_precision: 0.8607 Epoch 10/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.854843 — val_precision: 0.860638 — val_recall: 0.853608 Epoch 10: val_accuracy did not improve from 0.85773 31/31 [==============================] - 1s 19ms/step - loss: 0.3665 - accuracy: 0.8935 - val_loss: 0.4751 - val_accuracy: 0.8536 - val_f1: 0.8548 - val_recall: 0.8536 - val_precision: 0.8606 Epoch 11/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.859917 — val_precision: 0.864134 — val_recall: 0.858616 Epoch 11: val_accuracy improved from 0.85773 to 0.85862, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 0.3361 - accuracy: 0.9073 - val_loss: 0.4635 - val_accuracy: 0.8586 - val_f1: 0.8599 - val_recall: 0.8586 - val_precision: 0.8641 Epoch 12/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863488 — val_precision: 0.866138 — val_recall: 0.862445 Epoch 12: val_accuracy improved from 0.85862 to 0.86244, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 0.3146 - accuracy: 0.9108 - val_loss: 0.4521 - val_accuracy: 0.8624 - val_f1: 0.8635 - val_recall: 0.8624 - val_precision: 0.8661 Epoch 13/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863895 — val_precision: 0.866546 — val_recall: 0.863034 Epoch 13: val_accuracy improved from 0.86244 to 0.86303, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 0s 16ms/step - loss: 0.2799 - accuracy: 0.9158 - val_loss: 0.4522 - val_accuracy: 0.8630 - val_f1: 0.8639 - val_recall: 0.8630 - val_precision: 0.8665 Epoch 14/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863378 — val_precision: 0.865683 — val_recall: 0.862445 Epoch 14: val_accuracy did not improve from 0.86303 31/31 [==============================] - 0s 16ms/step - loss: 0.2754 - accuracy: 0.9196 - val_loss: 0.4520 - val_accuracy: 0.8624 - val_f1: 0.8634 - val_recall: 0.8624 - val_precision: 0.8657 Epoch 15/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864646 — val_precision: 0.867671 — val_recall: 0.863623 Epoch 15: val_accuracy improved from 0.86303 to 0.86362, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 18ms/step - loss: 0.2518 - accuracy: 0.9270 - val_loss: 0.4554 - val_accuracy: 0.8636 - val_f1: 0.8646 - val_recall: 0.8636 - val_precision: 0.8677 Epoch 16/100 107/107 [==============================] - 0s 3ms/step — val_f1: 0.867780 — val_precision: 0.869162 — val_recall: 0.867158 Epoch 16: val_accuracy improved from 0.86362 to 0.86716, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 32ms/step - loss: 0.2439 - accuracy: 0.9265 - val_loss: 0.4453 - val_accuracy: 0.8672 - val_f1: 0.8678 - val_recall: 0.8672 - val_precision: 0.8692 Epoch 17/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869314 — val_precision: 0.872412 — val_recall: 0.868041 Epoch 17: val_accuracy improved from 0.86716 to 0.86804, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 21ms/step - loss: 0.2215 - accuracy: 0.9340 - val_loss: 0.4515 - val_accuracy: 0.8680 - val_f1: 0.8693 - val_recall: 0.8680 - val_precision: 0.8724 Epoch 18/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866908 — val_precision: 0.868259 — val_recall: 0.866568 Epoch 18: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 21ms/step - loss: 0.2049 - accuracy: 0.9396 - val_loss: 0.4506 - val_accuracy: 0.8666 - val_f1: 0.8669 - val_recall: 0.8666 - val_precision: 0.8683 Epoch 19/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.868581 — val_precision: 0.870487 — val_recall: 0.867747 Epoch 19: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 19ms/step - loss: 0.1949 - accuracy: 0.9420 - val_loss: 0.4517 - val_accuracy: 0.8677 - val_f1: 0.8686 - val_recall: 0.8677 - val_precision: 0.8705 Epoch 20/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865799 — val_precision: 0.868560 — val_recall: 0.864801 Epoch 20: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.1839 - accuracy: 0.9476 - val_loss: 0.4574 - val_accuracy: 0.8648 - val_f1: 0.8658 - val_recall: 0.8648 - val_precision: 0.8686 Epoch 21/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866203 — val_precision: 0.870090 — val_recall: 0.864801 Epoch 21: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1773 - accuracy: 0.9496 - val_loss: 0.4637 - val_accuracy: 0.8648 - val_f1: 0.8662 - val_recall: 0.8648 - val_precision: 0.8701 Epoch 22/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866670 — val_precision: 0.869745 — val_recall: 0.865390 Epoch 22: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 19ms/step - loss: 0.1667 - accuracy: 0.9553 - val_loss: 0.4651 - val_accuracy: 0.8654 - val_f1: 0.8667 - val_recall: 0.8654 - val_precision: 0.8697 Epoch 23/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865376 — val_precision: 0.867791 — val_recall: 0.864507 Epoch 23: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1633 - accuracy: 0.9530 - val_loss: 0.4624 - val_accuracy: 0.8645 - val_f1: 0.8654 - val_recall: 0.8645 - val_precision: 0.8678 Epoch 24/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865270 — val_precision: 0.867071 — val_recall: 0.864507 Epoch 24: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1502 - accuracy: 0.9583 - val_loss: 0.4648 - val_accuracy: 0.8645 - val_f1: 0.8653 - val_recall: 0.8645 - val_precision: 0.8671 Epoch 25/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865805 — val_precision: 0.867552 — val_recall: 0.865096 Epoch 25: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1429 - accuracy: 0.9592 - val_loss: 0.4694 - val_accuracy: 0.8651 - val_f1: 0.8658 - val_recall: 0.8651 - val_precision: 0.8676 Epoch 26/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866487 — val_precision: 0.868060 — val_recall: 0.865685 Epoch 26: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 15ms/step - loss: 0.1329 - accuracy: 0.9643 - val_loss: 0.4693 - val_accuracy: 0.8657 - val_f1: 0.8665 - val_recall: 0.8657 - val_precision: 0.8681 Epoch 27/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867723 — val_precision: 0.870102 — val_recall: 0.866863 Epoch 27: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.1232 - accuracy: 0.9654 - val_loss: 0.4817 - val_accuracy: 0.8669 - val_f1: 0.8677 - val_recall: 0.8669 - val_precision: 0.8701 Epoch 28/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866015 — val_precision: 0.867262 — val_recall: 0.865685 Epoch 28: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1198 - accuracy: 0.9665 - val_loss: 0.4816 - val_accuracy: 0.8657 - val_f1: 0.8660 - val_recall: 0.8657 - val_precision: 0.8673 Epoch 29/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865812 — val_precision: 0.867309 — val_recall: 0.865096 Epoch 29: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1100 - accuracy: 0.9698 - val_loss: 0.4832 - val_accuracy: 0.8651 - val_f1: 0.8658 - val_recall: 0.8651 - val_precision: 0.8673 Epoch 30/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866318 — val_precision: 0.868646 — val_recall: 0.865390 Epoch 30: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1109 - accuracy: 0.9664 - val_loss: 0.4870 - val_accuracy: 0.8654 - val_f1: 0.8663 - val_recall: 0.8654 - val_precision: 0.8686 Epoch 31/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864723 — val_precision: 0.867289 — val_recall: 0.863623 Epoch 31: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 19ms/step - loss: 0.1054 - accuracy: 0.9730 - val_loss: 0.4897 - val_accuracy: 0.8636 - val_f1: 0.8647 - val_recall: 0.8636 - val_precision: 0.8673 Epoch 32/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864364 — val_precision: 0.865516 — val_recall: 0.863918 Epoch 32: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.1020 - accuracy: 0.9734 - val_loss: 0.4903 - val_accuracy: 0.8639 - val_f1: 0.8644 - val_recall: 0.8639 - val_precision: 0.8655 Epoch 33/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.868357 — val_precision: 0.870977 — val_recall: 0.867452 Epoch 33: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 19ms/step - loss: 0.0908 - accuracy: 0.9763 - val_loss: 0.4972 - val_accuracy: 0.8675 - val_f1: 0.8684 - val_recall: 0.8675 - val_precision: 0.8710 Epoch 34/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865243 — val_precision: 0.866918 — val_recall: 0.864507 Epoch 34: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.0876 - accuracy: 0.9793 - val_loss: 0.4956 - val_accuracy: 0.8645 - val_f1: 0.8652 - val_recall: 0.8645 - val_precision: 0.8669 Epoch 35/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866011 — val_precision: 0.867342 — val_recall: 0.865390 Epoch 35: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 17ms/step - loss: 0.0824 - accuracy: 0.9799 - val_loss: 0.4982 - val_accuracy: 0.8654 - val_f1: 0.8660 - val_recall: 0.8654 - val_precision: 0.8673 Epoch 36/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864685 — val_precision: 0.866398 — val_recall: 0.863918 Epoch 36: val_accuracy did not improve from 0.86804 31/31 [==============================] - 0s 16ms/step - loss: 0.0824 - accuracy: 0.9765 - val_loss: 0.5061 - val_accuracy: 0.8639 - val_f1: 0.8647 - val_recall: 0.8639 - val_precision: 0.8664 Epoch 37/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863663 — val_precision: 0.865265 — val_recall: 0.863034 Epoch 37: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.0780 - accuracy: 0.9780 - val_loss: 0.5054 - val_accuracy: 0.8630 - val_f1: 0.8637 - val_recall: 0.8630 - val_precision: 0.8653 Epoch 38/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867524 — val_precision: 0.869384 — val_recall: 0.866863 Epoch 38: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 22ms/step - loss: 0.0714 - accuracy: 0.9811 - val_loss: 0.5093 - val_accuracy: 0.8669 - val_f1: 0.8675 - val_recall: 0.8669 - val_precision: 0.8694 Epoch 39/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865513 — val_precision: 0.868021 — val_recall: 0.864507 Epoch 39: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 32ms/step - loss: 0.0688 - accuracy: 0.9837 - val_loss: 0.5106 - val_accuracy: 0.8645 - val_f1: 0.8655 - val_recall: 0.8645 - val_precision: 0.8680 Epoch 40/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864865 — val_precision: 0.866451 — val_recall: 0.864212 Epoch 40: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 20ms/step - loss: 0.0672 - accuracy: 0.9818 - val_loss: 0.5123 - val_accuracy: 0.8642 - val_f1: 0.8649 - val_recall: 0.8642 - val_precision: 0.8665 Epoch 41/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863759 — val_precision: 0.866224 — val_recall: 0.862739 Epoch 41: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 17ms/step - loss: 0.0668 - accuracy: 0.9828 - val_loss: 0.5206 - val_accuracy: 0.8627 - val_f1: 0.8638 - val_recall: 0.8627 - val_precision: 0.8662 Epoch 42/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.862574 — val_precision: 0.863984 — val_recall: 0.861856 Epoch 42: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.0647 - accuracy: 0.9826 - val_loss: 0.5175 - val_accuracy: 0.8619 - val_f1: 0.8626 - val_recall: 0.8619 - val_precision: 0.8640 Epoch 43/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867835 — val_precision: 0.868774 — val_recall: 0.867452 Epoch 43: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 16ms/step - loss: 0.0590 - accuracy: 0.9870 - val_loss: 0.5182 - val_accuracy: 0.8675 - val_f1: 0.8678 - val_recall: 0.8675 - val_precision: 0.8688 Epoch 44/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865566 — val_precision: 0.866799 — val_recall: 0.865096 Epoch 44: val_accuracy did not improve from 0.86804 31/31 [==============================] - 1s 18ms/step - loss: 0.0531 - accuracy: 0.9875 - val_loss: 0.5240 - val_accuracy: 0.8651 - val_f1: 0.8656 - val_recall: 0.8651 - val_precision: 0.8668 Epoch 45/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869021 — val_precision: 0.870196 — val_recall: 0.868630 Epoch 45: val_accuracy improved from 0.86804 to 0.86863, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 20ms/step - loss: 0.0553 - accuracy: 0.9860 - val_loss: 0.5253 - val_accuracy: 0.8686 - val_f1: 0.8690 - val_recall: 0.8686 - val_precision: 0.8702 Epoch 46/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866938 — val_precision: 0.868629 — val_recall: 0.866274 Epoch 46: val_accuracy did not improve from 0.86863 31/31 [==============================] - 0s 16ms/step - loss: 0.0498 - accuracy: 0.9884 - val_loss: 0.5341 - val_accuracy: 0.8663 - val_f1: 0.8669 - val_recall: 0.8663 - val_precision: 0.8686 Epoch 47/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867148 — val_precision: 0.868787 — val_recall: 0.866568 Epoch 47: val_accuracy did not improve from 0.86863 31/31 [==============================] - 1s 19ms/step - loss: 0.0529 - accuracy: 0.9866 - val_loss: 0.5323 - val_accuracy: 0.8666 - val_f1: 0.8671 - val_recall: 0.8666 - val_precision: 0.8688 Epoch 48/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869772 — val_precision: 0.871013 — val_recall: 0.869219 Epoch 48: val_accuracy improved from 0.86863 to 0.86922, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 1s 19ms/step - loss: 0.0484 - accuracy: 0.9886 - val_loss: 0.5352 - val_accuracy: 0.8692 - val_f1: 0.8698 - val_recall: 0.8692 - val_precision: 0.8710 Epoch 49/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865946 — val_precision: 0.867308 — val_recall: 0.865390 Epoch 49: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0449 - accuracy: 0.9890 - val_loss: 0.5426 - val_accuracy: 0.8654 - val_f1: 0.8659 - val_recall: 0.8654 - val_precision: 0.8673 Epoch 50/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867278 — val_precision: 0.868301 — val_recall: 0.866863 Epoch 50: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0456 - accuracy: 0.9878 - val_loss: 0.5381 - val_accuracy: 0.8669 - val_f1: 0.8673 - val_recall: 0.8669 - val_precision: 0.8683 Epoch 51/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863813 — val_precision: 0.865784 — val_recall: 0.863034 Epoch 51: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 15ms/step - loss: 0.0395 - accuracy: 0.9915 - val_loss: 0.5479 - val_accuracy: 0.8630 - val_f1: 0.8638 - val_recall: 0.8630 - val_precision: 0.8658 Epoch 52/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865202 — val_precision: 0.866916 — val_recall: 0.864507 Epoch 52: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0417 - accuracy: 0.9891 - val_loss: 0.5481 - val_accuracy: 0.8645 - val_f1: 0.8652 - val_recall: 0.8645 - val_precision: 0.8669 Epoch 53/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865763 — val_precision: 0.866658 — val_recall: 0.865390 Epoch 53: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 15ms/step - loss: 0.0372 - accuracy: 0.9917 - val_loss: 0.5447 - val_accuracy: 0.8654 - val_f1: 0.8658 - val_recall: 0.8654 - val_precision: 0.8667 Epoch 54/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866893 — val_precision: 0.868468 — val_recall: 0.866274 Epoch 54: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 20ms/step - loss: 0.0369 - accuracy: 0.9912 - val_loss: 0.5536 - val_accuracy: 0.8663 - val_f1: 0.8669 - val_recall: 0.8663 - val_precision: 0.8685 Epoch 55/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.863201 — val_precision: 0.865069 — val_recall: 0.862445 Epoch 55: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 15ms/step - loss: 0.0369 - accuracy: 0.9907 - val_loss: 0.5533 - val_accuracy: 0.8624 - val_f1: 0.8632 - val_recall: 0.8624 - val_precision: 0.8651 Epoch 56/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865467 — val_precision: 0.866772 — val_recall: 0.864801 Epoch 56: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0360 - accuracy: 0.9908 - val_loss: 0.5566 - val_accuracy: 0.8648 - val_f1: 0.8655 - val_recall: 0.8648 - val_precision: 0.8668 Epoch 57/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864734 — val_precision: 0.866472 — val_recall: 0.863918 Epoch 57: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0317 - accuracy: 0.9924 - val_loss: 0.5643 - val_accuracy: 0.8639 - val_f1: 0.8647 - val_recall: 0.8639 - val_precision: 0.8665 Epoch 58/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867396 — val_precision: 0.868820 — val_recall: 0.866863 Epoch 58: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0299 - accuracy: 0.9937 - val_loss: 0.5673 - val_accuracy: 0.8669 - val_f1: 0.8674 - val_recall: 0.8669 - val_precision: 0.8688 Epoch 59/100 107/107 [==============================] - 0s 3ms/step — val_f1: 0.867641 — val_precision: 0.869887 — val_recall: 0.866568 Epoch 59: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 23ms/step - loss: 0.0330 - accuracy: 0.9934 - val_loss: 0.5722 - val_accuracy: 0.8666 - val_f1: 0.8676 - val_recall: 0.8666 - val_precision: 0.8699 Epoch 60/100 107/107 [==============================] - 0s 3ms/step — val_f1: 0.866982 — val_precision: 0.867931 — val_recall: 0.866568 Epoch 60: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 22ms/step - loss: 0.0324 - accuracy: 0.9925 - val_loss: 0.5657 - val_accuracy: 0.8666 - val_f1: 0.8670 - val_recall: 0.8666 - val_precision: 0.8679 Epoch 61/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.868049 — val_precision: 0.869084 — val_recall: 0.867747 Epoch 61: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 22ms/step - loss: 0.0308 - accuracy: 0.9933 - val_loss: 0.5692 - val_accuracy: 0.8677 - val_f1: 0.8680 - val_recall: 0.8677 - val_precision: 0.8691 Epoch 62/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866120 — val_precision: 0.868172 — val_recall: 0.865390 Epoch 62: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0290 - accuracy: 0.9941 - val_loss: 0.5750 - val_accuracy: 0.8654 - val_f1: 0.8661 - val_recall: 0.8654 - val_precision: 0.8682 Epoch 63/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866113 — val_precision: 0.867079 — val_recall: 0.865685 Epoch 63: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0291 - accuracy: 0.9934 - val_loss: 0.5723 - val_accuracy: 0.8657 - val_f1: 0.8661 - val_recall: 0.8657 - val_precision: 0.8671 Epoch 64/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865095 — val_precision: 0.866764 — val_recall: 0.864212 Epoch 64: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0260 - accuracy: 0.9936 - val_loss: 0.5790 - val_accuracy: 0.8642 - val_f1: 0.8651 - val_recall: 0.8642 - val_precision: 0.8668 Epoch 65/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869122 — val_precision: 0.869886 — val_recall: 0.868925 Epoch 65: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0279 - accuracy: 0.9938 - val_loss: 0.5751 - val_accuracy: 0.8689 - val_f1: 0.8691 - val_recall: 0.8689 - val_precision: 0.8699 Epoch 66/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864787 — val_precision: 0.867104 — val_recall: 0.863918 Epoch 66: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0270 - accuracy: 0.9929 - val_loss: 0.5834 - val_accuracy: 0.8639 - val_f1: 0.8648 - val_recall: 0.8639 - val_precision: 0.8671 Epoch 67/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865064 — val_precision: 0.865933 — val_recall: 0.864801 Epoch 67: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0257 - accuracy: 0.9941 - val_loss: 0.5831 - val_accuracy: 0.8648 - val_f1: 0.8651 - val_recall: 0.8648 - val_precision: 0.8659 Epoch 68/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869060 — val_precision: 0.870330 — val_recall: 0.868630 Epoch 68: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0231 - accuracy: 0.9948 - val_loss: 0.5872 - val_accuracy: 0.8686 - val_f1: 0.8691 - val_recall: 0.8686 - val_precision: 0.8703 Epoch 69/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866274 — val_precision: 0.868134 — val_recall: 0.865685 Epoch 69: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0210 - accuracy: 0.9966 - val_loss: 0.5951 - val_accuracy: 0.8657 - val_f1: 0.8663 - val_recall: 0.8657 - val_precision: 0.8681 Epoch 70/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866996 — val_precision: 0.868758 — val_recall: 0.866568 Epoch 70: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0221 - accuracy: 0.9947 - val_loss: 0.5969 - val_accuracy: 0.8666 - val_f1: 0.8670 - val_recall: 0.8666 - val_precision: 0.8688 Epoch 71/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867264 — val_precision: 0.868508 — val_recall: 0.866863 Epoch 71: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0235 - accuracy: 0.9951 - val_loss: 0.5906 - val_accuracy: 0.8669 - val_f1: 0.8673 - val_recall: 0.8669 - val_precision: 0.8685 Epoch 72/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869013 — val_precision: 0.869921 — val_recall: 0.868630 Epoch 72: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0219 - accuracy: 0.9944 - val_loss: 0.5887 - val_accuracy: 0.8686 - val_f1: 0.8690 - val_recall: 0.8686 - val_precision: 0.8699 Epoch 73/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.868138 — val_precision: 0.869198 — val_recall: 0.867747 Epoch 73: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0198 - accuracy: 0.9962 - val_loss: 0.5928 - val_accuracy: 0.8677 - val_f1: 0.8681 - val_recall: 0.8677 - val_precision: 0.8692 Epoch 74/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867874 — val_precision: 0.869314 — val_recall: 0.867452 Epoch 74: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0217 - accuracy: 0.9952 - val_loss: 0.5964 - val_accuracy: 0.8675 - val_f1: 0.8679 - val_recall: 0.8675 - val_precision: 0.8693 Epoch 75/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.869180 — val_precision: 0.870164 — val_recall: 0.868925 Epoch 75: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0214 - accuracy: 0.9947 - val_loss: 0.5928 - val_accuracy: 0.8689 - val_f1: 0.8692 - val_recall: 0.8689 - val_precision: 0.8702 Epoch 76/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866166 — val_precision: 0.867176 — val_recall: 0.865685 Epoch 76: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0195 - accuracy: 0.9960 - val_loss: 0.5933 - val_accuracy: 0.8657 - val_f1: 0.8662 - val_recall: 0.8657 - val_precision: 0.8672 Epoch 77/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866158 — val_precision: 0.867838 — val_recall: 0.865390 Epoch 77: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0183 - accuracy: 0.9962 - val_loss: 0.6014 - val_accuracy: 0.8654 - val_f1: 0.8662 - val_recall: 0.8654 - val_precision: 0.8678 Epoch 78/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865047 — val_precision: 0.866415 — val_recall: 0.864507 Epoch 78: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0189 - accuracy: 0.9960 - val_loss: 0.6002 - val_accuracy: 0.8645 - val_f1: 0.8650 - val_recall: 0.8645 - val_precision: 0.8664 Epoch 79/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864655 — val_precision: 0.865616 — val_recall: 0.864212 Epoch 79: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0196 - accuracy: 0.9957 - val_loss: 0.6011 - val_accuracy: 0.8642 - val_f1: 0.8647 - val_recall: 0.8642 - val_precision: 0.8656 Epoch 80/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865772 — val_precision: 0.867028 — val_recall: 0.865390 Epoch 80: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0202 - accuracy: 0.9953 - val_loss: 0.6027 - val_accuracy: 0.8654 - val_f1: 0.8658 - val_recall: 0.8654 - val_precision: 0.8670 Epoch 81/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866703 — val_precision: 0.867825 — val_recall: 0.866274 Epoch 81: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 22ms/step - loss: 0.0188 - accuracy: 0.9951 - val_loss: 0.6023 - val_accuracy: 0.8663 - val_f1: 0.8667 - val_recall: 0.8663 - val_precision: 0.8678 Epoch 82/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866308 — val_precision: 0.867593 — val_recall: 0.865979 Epoch 82: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 31ms/step - loss: 0.0166 - accuracy: 0.9970 - val_loss: 0.6102 - val_accuracy: 0.8660 - val_f1: 0.8663 - val_recall: 0.8660 - val_precision: 0.8676 Epoch 83/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866988 — val_precision: 0.868420 — val_recall: 0.866568 Epoch 83: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0181 - accuracy: 0.9963 - val_loss: 0.6145 - val_accuracy: 0.8666 - val_f1: 0.8670 - val_recall: 0.8666 - val_precision: 0.8684 Epoch 84/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864881 — val_precision: 0.866361 — val_recall: 0.864507 Epoch 84: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0179 - accuracy: 0.9967 - val_loss: 0.6159 - val_accuracy: 0.8645 - val_f1: 0.8649 - val_recall: 0.8645 - val_precision: 0.8664 Epoch 85/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.861809 — val_precision: 0.862816 — val_recall: 0.861267 Epoch 85: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0154 - accuracy: 0.9967 - val_loss: 0.6195 - val_accuracy: 0.8613 - val_f1: 0.8618 - val_recall: 0.8613 - val_precision: 0.8628 Epoch 86/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866004 — val_precision: 0.867697 — val_recall: 0.865390 Epoch 86: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0152 - accuracy: 0.9966 - val_loss: 0.6255 - val_accuracy: 0.8654 - val_f1: 0.8660 - val_recall: 0.8654 - val_precision: 0.8677 Epoch 87/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865842 — val_precision: 0.866859 — val_recall: 0.865390 Epoch 87: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0153 - accuracy: 0.9965 - val_loss: 0.6215 - val_accuracy: 0.8654 - val_f1: 0.8658 - val_recall: 0.8654 - val_precision: 0.8669 Epoch 88/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867517 — val_precision: 0.868754 — val_recall: 0.867158 Epoch 88: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0158 - accuracy: 0.9961 - val_loss: 0.6302 - val_accuracy: 0.8672 - val_f1: 0.8675 - val_recall: 0.8672 - val_precision: 0.8688 Epoch 89/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866561 — val_precision: 0.868270 — val_recall: 0.865979 Epoch 89: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0141 - accuracy: 0.9966 - val_loss: 0.6368 - val_accuracy: 0.8660 - val_f1: 0.8666 - val_recall: 0.8660 - val_precision: 0.8683 Epoch 90/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.864268 — val_precision: 0.865587 — val_recall: 0.863918 Epoch 90: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0153 - accuracy: 0.9961 - val_loss: 0.6317 - val_accuracy: 0.8639 - val_f1: 0.8643 - val_recall: 0.8639 - val_precision: 0.8656 Epoch 91/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867142 — val_precision: 0.868353 — val_recall: 0.866863 Epoch 91: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0134 - accuracy: 0.9981 - val_loss: 0.6306 - val_accuracy: 0.8669 - val_f1: 0.8671 - val_recall: 0.8669 - val_precision: 0.8684 Epoch 92/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865181 — val_precision: 0.866167 — val_recall: 0.864801 Epoch 92: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0136 - accuracy: 0.9976 - val_loss: 0.6341 - val_accuracy: 0.8648 - val_f1: 0.8652 - val_recall: 0.8648 - val_precision: 0.8662 Epoch 93/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866303 — val_precision: 0.867235 — val_recall: 0.865979 Epoch 93: val_accuracy did not improve from 0.86922 31/31 [==============================] - 0s 16ms/step - loss: 0.0149 - accuracy: 0.9965 - val_loss: 0.6303 - val_accuracy: 0.8660 - val_f1: 0.8663 - val_recall: 0.8660 - val_precision: 0.8672 Epoch 94/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.867120 — val_precision: 0.868383 — val_recall: 0.866863 Epoch 94: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0140 - accuracy: 0.9966 - val_loss: 0.6329 - val_accuracy: 0.8669 - val_f1: 0.8671 - val_recall: 0.8669 - val_precision: 0.8684 Epoch 95/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.868470 — val_precision: 0.869045 — val_recall: 0.868336 Epoch 95: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 20ms/step - loss: 0.0144 - accuracy: 0.9961 - val_loss: 0.6329 - val_accuracy: 0.8683 - val_f1: 0.8685 - val_recall: 0.8683 - val_precision: 0.8690 Epoch 96/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866881 — val_precision: 0.867857 — val_recall: 0.866568 Epoch 96: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0128 - accuracy: 0.9970 - val_loss: 0.6364 - val_accuracy: 0.8666 - val_f1: 0.8669 - val_recall: 0.8666 - val_precision: 0.8679 Epoch 97/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.865520 — val_precision: 0.866595 — val_recall: 0.865096 Epoch 97: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 17ms/step - loss: 0.0112 - accuracy: 0.9980 - val_loss: 0.6372 - val_accuracy: 0.8651 - val_f1: 0.8655 - val_recall: 0.8651 - val_precision: 0.8666 Epoch 98/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866106 — val_precision: 0.866937 — val_recall: 0.865979 Epoch 98: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 19ms/step - loss: 0.0130 - accuracy: 0.9970 - val_loss: 0.6349 - val_accuracy: 0.8660 - val_f1: 0.8661 - val_recall: 0.8660 - val_precision: 0.8669 Epoch 99/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.866650 — val_precision: 0.867919 — val_recall: 0.866274 Epoch 99: val_accuracy did not improve from 0.86922 31/31 [==============================] - 1s 18ms/step - loss: 0.0130 - accuracy: 0.9970 - val_loss: 0.6406 - val_accuracy: 0.8663 - val_f1: 0.8667 - val_recall: 0.8663 - val_precision: 0.8679 Epoch 100/100 107/107 [==============================] - 0s 2ms/step — val_f1: 0.870035 — val_precision: 0.871783 — val_recall: 0.869514 Epoch 100: val_accuracy improved from 0.86922 to 0.86951, saving model to checkpoints/weights.hdf5 31/31 [==============================] - 0s 16ms/step - loss: 0.0128 - accuracy: 0.9976 - val_loss: 0.6409 - val_accuracy: 0.8695 - val_f1: 0.8700 - val_recall: 0.8695 - val_precision: 0.8718 Training time: 00:00:57 sec
%matplotlib inline
import matplotlib.pyplot as plt
# summarize history for accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'dev'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'dev'], loc='upper right')
plt.show()
import warnings
from tensorflow.keras import backend as K
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
with tf.device('/device:GPU:0'):
model = Sequential()
model.add(Dense(512, input_dim=X_val_svd.shape[1] , activation='relu'))
model.add(Dense(256, activation='relu'))
model.add(Dense(len(twenty_train.target_names), activation='softmax'))
# Load weights from the pre-trained model
model.load_weights("checkpoints/weights.hdf5")
model.compile(
loss='categorical_crossentropy',
optimizer=Adam(lr=0.001),
metrics=["accuracy"]
)
predictions = np.argmax(model.predict(X_val_svd), -1)
print(classification_report(y_val, predictions, target_names=twenty_train.target_names))
WARNING:absl:`lr` is deprecated in Keras optimizer, please use `learning_rate` or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.Adam.
107/107 [==============================] - 0s 2ms/step
precision recall f1-score support
alt.atheism 0.95 0.89 0.92 160
comp.graphics 0.73 0.76 0.75 165
comp.os.ms-windows.misc 0.83 0.85 0.84 189
comp.sys.ibm.pc.hardware 0.72 0.77 0.74 168
comp.sys.mac.hardware 0.87 0.75 0.80 182
comp.windows.x 0.92 0.86 0.89 168
misc.forsale 0.78 0.84 0.81 182
rec.autos 0.87 0.82 0.84 181
rec.motorcycles 0.90 0.89 0.90 184
rec.sport.baseball 0.92 0.89 0.90 169
rec.sport.hockey 0.92 0.95 0.94 175
sci.crypt 0.96 0.97 0.97 177
sci.electronics 0.74 0.80 0.77 173
sci.med 0.88 0.91 0.89 181
sci.space 0.93 0.92 0.93 181
soc.religion.christian 0.90 0.89 0.90 177
talk.politics.guns 0.93 0.93 0.93 177
talk.politics.mideast 0.96 0.96 0.96 170
talk.politics.misc 0.89 0.90 0.89 135
talk.religion.misc 0.81 0.79 0.80 101
accuracy 0.87 3395
macro avg 0.87 0.87 0.87 3395
weighted avg 0.87 0.87 0.87 3395
from sklearn.metrics import accuracy_score
predictions = np.argmax(model.predict(X_val_svd), -1)
print(f'Validation Accuracy: {accuracy_score(y_val, predictions)*100:.2f}%')
predictions = np.argmax(model.predict(X_test_svd), -1)
print(f'Test Accuracy:{accuracy_score(y_test, predictions)*100:.2f}%')
107/107 [==============================] - 0s 2ms/step Validation Accuracy: 86.95% 94/94 [==============================] - 0s 2ms/step Test Accuracy:77.10%
# !du -sh checkpoints # disk usage of checkpoints
import gensim.downloader as api
wv = api.load('word2vec-google-news-300')
[==================================================] 100.0% 1662.8/1662.8MB downloaded
!nvidia-smi
Sun Nov 5 14:09:09 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.105.17 Driver Version: 525.105.17 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 35C P8 9W / 70W | 3MiB / 15360MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
import numpy as np
from spacy.lang.en.stop_words import STOP_WORDS
def text_centroid(text, model):
""" Calculate centroid function """
text_vec =[]
counter = 0
for word in text:
if word in STOP_WORDS:
continue
try:
if counter == 0:
text_vec = model[word.lower()]
else:
text_vec = np.add(text_vec, model[word.lower()])
counter+=1
except:
pass
return np.asarray(text_vec) / counter
# Calculate centroids for train and val documents
X_train_centroids = [text_centroid(sent, wv) for sent in X_train_tokenized]
X_train_centroids = np.stack(X_train_centroids, axis=0)
X_val_centroids = [text_centroid(sent, wv) for sent in X_val_tokenized]
X_val_centroids = np.stack(X_val_centroids, axis=0)
print(X_train_centroids.shape)
(7919, 300)
X_test_centroids = [text_centroid(sent, wv) for sent in X_test_tokenized]
X_test_centroids = np.stack(X_test_centroids, axis=0)
import time
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
from tensorflow.keras.callbacks import ModelCheckpoint
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.optimizers import Adam
with tf.device('/device:GPU:0'):
model2 = Sequential()
model2.add(Dense(1024, input_dim=X_train_centroids.shape[1] , activation='relu'))
model2.add(Dropout(0.3))
model2.add(Dense(1024, activation='relu'))
model2.add(Dropout(0.3))
model2.add(Dense(512, activation='relu'))
model2.add(Dropout(0.3))
model2.add(Dense(len(twenty_train.target_names), activation='softmax'))
print(model2.summary())
model2.compile(
loss='categorical_crossentropy',
optimizer=Adam(learning_rate=0.001),
metrics=["accuracy"]
)
if not os.path.exists('./checkpoints'):
os.makedirs('./checkpoints')
checkpoint = ModelCheckpoint(
'checkpoints/weights2.hdf5',
monitor='val_accuracy',
mode='max', verbose=2,
save_best_only=True,
save_weights_only=True
)
start_training_time = time.time()
history2 = model2.fit(
X_train_centroids, y_train_1_hot,
validation_data=(X_val_centroids, y_val_1_hot),
batch_size=256,
epochs=100,
shuffle=True,
callbacks=[Metrics(valid_data=(X_val_centroids, y_val_1_hot)), checkpoint]
)
end_training_time = time.time()
print(f'\nTraining time: {time.strftime("%H:%M:%S", time.gmtime(end_training_time - start_training_time))} sec\n')
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_4 (Dense) (None, 1024) 308224
dropout_3 (Dropout) (None, 1024) 0
dense_5 (Dense) (None, 1024) 1049600
dropout_4 (Dropout) (None, 1024) 0
dense_6 (Dense) (None, 512) 524800
dropout_5 (Dropout) (None, 512) 0
dense_7 (Dense) (None, 20) 10260
=================================================================
Total params: 1892884 (7.22 MB)
Trainable params: 1892884 (7.22 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
None
Epoch 1/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.391382 — val_precision: 0.542463 — val_recall: 0.444477
Epoch 1: val_accuracy improved from -inf to 0.44448, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 9s 29ms/step - loss: 2.4083 - accuracy: 0.2401 - val_loss: 1.6716 - val_accuracy: 0.4445 - val_f1: 0.3914 - val_recall: 0.4445 - val_precision: 0.5425
Epoch 2/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.559358 — val_precision: 0.621434 — val_recall: 0.583800
Epoch 2: val_accuracy improved from 0.44448 to 0.58380, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 1.4813 - accuracy: 0.4834 - val_loss: 1.2551 - val_accuracy: 0.5838 - val_f1: 0.5594 - val_recall: 0.5838 - val_precision: 0.6214
Epoch 3/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.654585 — val_precision: 0.661551 — val_recall: 0.661267
Epoch 3: val_accuracy improved from 0.58380 to 0.66127, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 21ms/step - loss: 1.1750 - accuracy: 0.5906 - val_loss: 1.0410 - val_accuracy: 0.6613 - val_f1: 0.6546 - val_recall: 0.6613 - val_precision: 0.6616
Epoch 4/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.667145 — val_precision: 0.692096 — val_recall: 0.671870
Epoch 4: val_accuracy improved from 0.66127 to 0.67187, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 18ms/step - loss: 1.0169 - accuracy: 0.6467 - val_loss: 0.9720 - val_accuracy: 0.6719 - val_f1: 0.6671 - val_recall: 0.6719 - val_precision: 0.6921
Epoch 5/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.698680 — val_precision: 0.717822 — val_recall: 0.708100
Epoch 5: val_accuracy improved from 0.67187 to 0.70810, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 18ms/step - loss: 0.9255 - accuracy: 0.6819 - val_loss: 0.9070 - val_accuracy: 0.7081 - val_f1: 0.6987 - val_recall: 0.7081 - val_precision: 0.7178
Epoch 6/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.692149 — val_precision: 0.723693 — val_recall: 0.701325
Epoch 6: val_accuracy did not improve from 0.70810
31/31 [==============================] - 0s 16ms/step - loss: 0.8465 - accuracy: 0.7115 - val_loss: 0.8882 - val_accuracy: 0.7013 - val_f1: 0.6921 - val_recall: 0.7013 - val_precision: 0.7237
Epoch 7/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.721671 — val_precision: 0.744522 — val_recall: 0.726068
Epoch 7: val_accuracy improved from 0.70810 to 0.72607, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.7775 - accuracy: 0.7344 - val_loss: 0.8327 - val_accuracy: 0.7261 - val_f1: 0.7217 - val_recall: 0.7261 - val_precision: 0.7445
Epoch 8/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.738248 — val_precision: 0.744568 — val_recall: 0.741973
Epoch 8: val_accuracy improved from 0.72607 to 0.74197, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.7472 - accuracy: 0.7472 - val_loss: 0.7989 - val_accuracy: 0.7420 - val_f1: 0.7382 - val_recall: 0.7420 - val_precision: 0.7446
Epoch 9/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.741523 — val_precision: 0.756594 — val_recall: 0.744035
Epoch 9: val_accuracy improved from 0.74197 to 0.74404, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 17ms/step - loss: 0.6997 - accuracy: 0.7692 - val_loss: 0.8061 - val_accuracy: 0.7440 - val_f1: 0.7415 - val_recall: 0.7440 - val_precision: 0.7566
Epoch 10/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.734723 — val_precision: 0.747844 — val_recall: 0.740795
Epoch 10: val_accuracy did not improve from 0.74404
31/31 [==============================] - 0s 16ms/step - loss: 0.6600 - accuracy: 0.7829 - val_loss: 0.7954 - val_accuracy: 0.7408 - val_f1: 0.7347 - val_recall: 0.7408 - val_precision: 0.7478
Epoch 11/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.745013 — val_precision: 0.762697 — val_recall: 0.747865
Epoch 11: val_accuracy improved from 0.74404 to 0.74786, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.6273 - accuracy: 0.7896 - val_loss: 0.7846 - val_accuracy: 0.7479 - val_f1: 0.7450 - val_recall: 0.7479 - val_precision: 0.7627
Epoch 12/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.747226 — val_precision: 0.756181 — val_recall: 0.750810
Epoch 12: val_accuracy improved from 0.74786 to 0.75081, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.6072 - accuracy: 0.7966 - val_loss: 0.7791 - val_accuracy: 0.7508 - val_f1: 0.7472 - val_recall: 0.7508 - val_precision: 0.7562
Epoch 13/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.742697 — val_precision: 0.761039 — val_recall: 0.746686
Epoch 13: val_accuracy did not improve from 0.75081
31/31 [==============================] - 1s 17ms/step - loss: 0.5717 - accuracy: 0.8107 - val_loss: 0.7788 - val_accuracy: 0.7467 - val_f1: 0.7427 - val_recall: 0.7467 - val_precision: 0.7610
Epoch 14/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.758928 — val_precision: 0.773838 — val_recall: 0.756701
Epoch 14: val_accuracy improved from 0.75081 to 0.75670, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 17ms/step - loss: 0.5383 - accuracy: 0.8194 - val_loss: 0.7725 - val_accuracy: 0.7567 - val_f1: 0.7589 - val_recall: 0.7567 - val_precision: 0.7738
Epoch 15/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.755875 — val_precision: 0.767018 — val_recall: 0.759941
Epoch 15: val_accuracy improved from 0.75670 to 0.75994, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.5205 - accuracy: 0.8261 - val_loss: 0.7808 - val_accuracy: 0.7599 - val_f1: 0.7559 - val_recall: 0.7599 - val_precision: 0.7670
Epoch 16/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.760229 — val_precision: 0.772592 — val_recall: 0.761414
Epoch 16: val_accuracy improved from 0.75994 to 0.76141, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 19ms/step - loss: 0.5103 - accuracy: 0.8267 - val_loss: 0.7788 - val_accuracy: 0.7614 - val_f1: 0.7602 - val_recall: 0.7614 - val_precision: 0.7726
Epoch 17/100
107/107 [==============================] - 0s 3ms/step
— val_f1: 0.764106 — val_precision: 0.772128 — val_recall: 0.765832
Epoch 17: val_accuracy improved from 0.76141 to 0.76583, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 37ms/step - loss: 0.4510 - accuracy: 0.8467 - val_loss: 0.7634 - val_accuracy: 0.7658 - val_f1: 0.7641 - val_recall: 0.7658 - val_precision: 0.7721
Epoch 18/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.765123 — val_precision: 0.771226 — val_recall: 0.766421
Epoch 18: val_accuracy improved from 0.76583 to 0.76642, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 23ms/step - loss: 0.4329 - accuracy: 0.8577 - val_loss: 0.7599 - val_accuracy: 0.7664 - val_f1: 0.7651 - val_recall: 0.7664 - val_precision: 0.7712
Epoch 19/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.765752 — val_precision: 0.768304 — val_recall: 0.767894
Epoch 19: val_accuracy improved from 0.76642 to 0.76789, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 21ms/step - loss: 0.4121 - accuracy: 0.8631 - val_loss: 0.7476 - val_accuracy: 0.7679 - val_f1: 0.7658 - val_recall: 0.7679 - val_precision: 0.7683
Epoch 20/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.772622 — val_precision: 0.780782 — val_recall: 0.774374
Epoch 20: val_accuracy improved from 0.76789 to 0.77437, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.3753 - accuracy: 0.8723 - val_loss: 0.7743 - val_accuracy: 0.7744 - val_f1: 0.7726 - val_recall: 0.7744 - val_precision: 0.7808
Epoch 21/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.774956 — val_precision: 0.782473 — val_recall: 0.776141
Epoch 21: val_accuracy improved from 0.77437 to 0.77614, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.3699 - accuracy: 0.8769 - val_loss: 0.7626 - val_accuracy: 0.7761 - val_f1: 0.7750 - val_recall: 0.7761 - val_precision: 0.7825
Epoch 22/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.769370 — val_precision: 0.776888 — val_recall: 0.770839
Epoch 22: val_accuracy did not improve from 0.77614
31/31 [==============================] - 1s 17ms/step - loss: 0.3496 - accuracy: 0.8816 - val_loss: 0.7812 - val_accuracy: 0.7708 - val_f1: 0.7694 - val_recall: 0.7708 - val_precision: 0.7769
Epoch 23/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.779098 — val_precision: 0.787053 — val_recall: 0.778792
Epoch 23: val_accuracy improved from 0.77614 to 0.77879, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 18ms/step - loss: 0.3260 - accuracy: 0.8934 - val_loss: 0.7776 - val_accuracy: 0.7788 - val_f1: 0.7791 - val_recall: 0.7788 - val_precision: 0.7871
Epoch 24/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.778191 — val_precision: 0.785216 — val_recall: 0.778498
Epoch 24: val_accuracy did not improve from 0.77879
31/31 [==============================] - 1s 19ms/step - loss: 0.3076 - accuracy: 0.8978 - val_loss: 0.7829 - val_accuracy: 0.7785 - val_f1: 0.7782 - val_recall: 0.7785 - val_precision: 0.7852
Epoch 25/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.777553 — val_precision: 0.786042 — val_recall: 0.775847
Epoch 25: val_accuracy did not improve from 0.77879
31/31 [==============================] - 0s 16ms/step - loss: 0.2971 - accuracy: 0.9019 - val_loss: 0.7971 - val_accuracy: 0.7758 - val_f1: 0.7776 - val_recall: 0.7758 - val_precision: 0.7860
Epoch 26/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.771951 — val_precision: 0.788725 — val_recall: 0.772018
Epoch 26: val_accuracy did not improve from 0.77879
31/31 [==============================] - 1s 19ms/step - loss: 0.2685 - accuracy: 0.9096 - val_loss: 0.8039 - val_accuracy: 0.7720 - val_f1: 0.7720 - val_recall: 0.7720 - val_precision: 0.7887
Epoch 27/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.771287 — val_precision: 0.783922 — val_recall: 0.769661
Epoch 27: val_accuracy did not improve from 0.77879
31/31 [==============================] - 0s 16ms/step - loss: 0.2747 - accuracy: 0.9053 - val_loss: 0.8222 - val_accuracy: 0.7697 - val_f1: 0.7713 - val_recall: 0.7697 - val_precision: 0.7839
Epoch 28/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.768515 — val_precision: 0.784707 — val_recall: 0.766127
Epoch 28: val_accuracy did not improve from 0.77879
31/31 [==============================] - 1s 19ms/step - loss: 0.2739 - accuracy: 0.9088 - val_loss: 0.8511 - val_accuracy: 0.7661 - val_f1: 0.7685 - val_recall: 0.7661 - val_precision: 0.7847
Epoch 29/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787120 — val_precision: 0.793298 — val_recall: 0.785862
Epoch 29: val_accuracy improved from 0.77879 to 0.78586, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 17ms/step - loss: 0.2348 - accuracy: 0.9206 - val_loss: 0.7998 - val_accuracy: 0.7859 - val_f1: 0.7871 - val_recall: 0.7859 - val_precision: 0.7933
Epoch 30/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.780339 — val_precision: 0.782846 — val_recall: 0.783505
Epoch 30: val_accuracy did not improve from 0.78586
31/31 [==============================] - 1s 17ms/step - loss: 0.2279 - accuracy: 0.9259 - val_loss: 0.8208 - val_accuracy: 0.7835 - val_f1: 0.7803 - val_recall: 0.7835 - val_precision: 0.7828
Epoch 31/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.773159 — val_precision: 0.782897 — val_recall: 0.775552
Epoch 31: val_accuracy did not improve from 0.78586
31/31 [==============================] - 1s 20ms/step - loss: 0.2139 - accuracy: 0.9308 - val_loss: 0.8678 - val_accuracy: 0.7756 - val_f1: 0.7732 - val_recall: 0.7756 - val_precision: 0.7829
Epoch 32/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.789261 — val_precision: 0.793097 — val_recall: 0.788807
Epoch 32: val_accuracy improved from 0.78586 to 0.78881, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.2000 - accuracy: 0.9346 - val_loss: 0.8127 - val_accuracy: 0.7888 - val_f1: 0.7893 - val_recall: 0.7888 - val_precision: 0.7931
Epoch 33/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.786019 — val_precision: 0.791267 — val_recall: 0.784978
Epoch 33: val_accuracy did not improve from 0.78881
31/31 [==============================] - 0s 16ms/step - loss: 0.1854 - accuracy: 0.9382 - val_loss: 0.8527 - val_accuracy: 0.7850 - val_f1: 0.7860 - val_recall: 0.7850 - val_precision: 0.7913
Epoch 34/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.789911 — val_precision: 0.794539 — val_recall: 0.790280
Epoch 34: val_accuracy improved from 0.78881 to 0.79028, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.1781 - accuracy: 0.9447 - val_loss: 0.8594 - val_accuracy: 0.7903 - val_f1: 0.7899 - val_recall: 0.7903 - val_precision: 0.7945
Epoch 35/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.779893 — val_precision: 0.790155 — val_recall: 0.778498
Epoch 35: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 19ms/step - loss: 0.1731 - accuracy: 0.9414 - val_loss: 0.8957 - val_accuracy: 0.7785 - val_f1: 0.7799 - val_recall: 0.7785 - val_precision: 0.7902
Epoch 36/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.776964 — val_precision: 0.790773 — val_recall: 0.777025
Epoch 36: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 20ms/step - loss: 0.1812 - accuracy: 0.9396 - val_loss: 0.9251 - val_accuracy: 0.7770 - val_f1: 0.7770 - val_recall: 0.7770 - val_precision: 0.7908
Epoch 37/100
107/107 [==============================] - 0s 3ms/step
— val_f1: 0.788299 — val_precision: 0.793503 — val_recall: 0.789396
Epoch 37: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 24ms/step - loss: 0.1712 - accuracy: 0.9436 - val_loss: 0.8941 - val_accuracy: 0.7894 - val_f1: 0.7883 - val_recall: 0.7894 - val_precision: 0.7935
Epoch 38/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.780434 — val_precision: 0.786473 — val_recall: 0.780560
Epoch 38: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 33ms/step - loss: 0.1468 - accuracy: 0.9524 - val_loss: 0.9289 - val_accuracy: 0.7806 - val_f1: 0.7804 - val_recall: 0.7806 - val_precision: 0.7865
Epoch 39/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787681 — val_precision: 0.789582 — val_recall: 0.789102
Epoch 39: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 21ms/step - loss: 0.1572 - accuracy: 0.9495 - val_loss: 0.8893 - val_accuracy: 0.7891 - val_f1: 0.7877 - val_recall: 0.7891 - val_precision: 0.7896
Epoch 40/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.783962 — val_precision: 0.789054 — val_recall: 0.784389
Epoch 40: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 19ms/step - loss: 0.1389 - accuracy: 0.9549 - val_loss: 0.9484 - val_accuracy: 0.7844 - val_f1: 0.7840 - val_recall: 0.7844 - val_precision: 0.7891
Epoch 41/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.779398 — val_precision: 0.790924 — val_recall: 0.779971
Epoch 41: val_accuracy did not improve from 0.79028
31/31 [==============================] - 1s 18ms/step - loss: 0.1387 - accuracy: 0.9548 - val_loss: 0.9944 - val_accuracy: 0.7800 - val_f1: 0.7794 - val_recall: 0.7800 - val_precision: 0.7909
Epoch 42/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.791242 — val_precision: 0.797232 — val_recall: 0.790869
Epoch 42: val_accuracy improved from 0.79028 to 0.79087, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 18ms/step - loss: 0.1428 - accuracy: 0.9535 - val_loss: 0.9213 - val_accuracy: 0.7909 - val_f1: 0.7912 - val_recall: 0.7909 - val_precision: 0.7972
Epoch 43/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.782994 — val_precision: 0.790415 — val_recall: 0.782032
Epoch 43: val_accuracy did not improve from 0.79087
31/31 [==============================] - 1s 18ms/step - loss: 0.1352 - accuracy: 0.9588 - val_loss: 0.9646 - val_accuracy: 0.7820 - val_f1: 0.7830 - val_recall: 0.7820 - val_precision: 0.7904
Epoch 44/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.779037 — val_precision: 0.782679 — val_recall: 0.780265
Epoch 44: val_accuracy did not improve from 0.79087
31/31 [==============================] - 0s 16ms/step - loss: 0.1289 - accuracy: 0.9582 - val_loss: 0.9536 - val_accuracy: 0.7803 - val_f1: 0.7790 - val_recall: 0.7803 - val_precision: 0.7827
Epoch 45/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.774647 — val_precision: 0.781232 — val_recall: 0.775258
Epoch 45: val_accuracy did not improve from 0.79087
31/31 [==============================] - 1s 20ms/step - loss: 0.1187 - accuracy: 0.9615 - val_loss: 1.0153 - val_accuracy: 0.7753 - val_f1: 0.7746 - val_recall: 0.7753 - val_precision: 0.7812
Epoch 46/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787239 — val_precision: 0.794327 — val_recall: 0.788218
Epoch 46: val_accuracy did not improve from 0.79087
31/31 [==============================] - 0s 16ms/step - loss: 0.1260 - accuracy: 0.9597 - val_loss: 0.9770 - val_accuracy: 0.7882 - val_f1: 0.7872 - val_recall: 0.7882 - val_precision: 0.7943
Epoch 47/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.783333 — val_precision: 0.789203 — val_recall: 0.782622
Epoch 47: val_accuracy did not improve from 0.79087
31/31 [==============================] - 1s 19ms/step - loss: 0.1126 - accuracy: 0.9624 - val_loss: 1.0084 - val_accuracy: 0.7826 - val_f1: 0.7833 - val_recall: 0.7826 - val_precision: 0.7892
Epoch 48/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790066 — val_precision: 0.793702 — val_recall: 0.790869
Epoch 48: val_accuracy did not improve from 0.79087
31/31 [==============================] - 1s 16ms/step - loss: 0.1114 - accuracy: 0.9638 - val_loss: 1.0038 - val_accuracy: 0.7909 - val_f1: 0.7901 - val_recall: 0.7909 - val_precision: 0.7937
Epoch 49/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792012 — val_precision: 0.798813 — val_recall: 0.791458
Epoch 49: val_accuracy improved from 0.79087 to 0.79146, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 20ms/step - loss: 0.0964 - accuracy: 0.9715 - val_loss: 1.0177 - val_accuracy: 0.7915 - val_f1: 0.7920 - val_recall: 0.7915 - val_precision: 0.7988
Epoch 50/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.780485 — val_precision: 0.786932 — val_recall: 0.781149
Epoch 50: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 18ms/step - loss: 0.0926 - accuracy: 0.9718 - val_loss: 1.0628 - val_accuracy: 0.7811 - val_f1: 0.7805 - val_recall: 0.7811 - val_precision: 0.7869
Epoch 51/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.781718 — val_precision: 0.787291 — val_recall: 0.783505
Epoch 51: val_accuracy did not improve from 0.79146
31/31 [==============================] - 0s 16ms/step - loss: 0.1006 - accuracy: 0.9664 - val_loss: 1.0583 - val_accuracy: 0.7835 - val_f1: 0.7817 - val_recall: 0.7835 - val_precision: 0.7873
Epoch 52/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.777317 — val_precision: 0.783042 — val_recall: 0.779087
Epoch 52: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 19ms/step - loss: 0.1061 - accuracy: 0.9659 - val_loss: 1.0334 - val_accuracy: 0.7791 - val_f1: 0.7773 - val_recall: 0.7791 - val_precision: 0.7830
Epoch 53/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790237 — val_precision: 0.796483 — val_recall: 0.789102
Epoch 53: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 17ms/step - loss: 0.0964 - accuracy: 0.9683 - val_loss: 1.0480 - val_accuracy: 0.7891 - val_f1: 0.7902 - val_recall: 0.7891 - val_precision: 0.7965
Epoch 54/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787281 — val_precision: 0.790843 — val_recall: 0.789691
Epoch 54: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 20ms/step - loss: 0.0928 - accuracy: 0.9693 - val_loss: 1.0581 - val_accuracy: 0.7897 - val_f1: 0.7873 - val_recall: 0.7897 - val_precision: 0.7908
Epoch 55/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.791332 — val_precision: 0.795578 — val_recall: 0.791458
Epoch 55: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 20ms/step - loss: 0.0935 - accuracy: 0.9703 - val_loss: 1.0288 - val_accuracy: 0.7915 - val_f1: 0.7913 - val_recall: 0.7915 - val_precision: 0.7956
Epoch 56/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.781267 — val_precision: 0.788242 — val_recall: 0.780854
Epoch 56: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 18ms/step - loss: 0.0862 - accuracy: 0.9731 - val_loss: 1.0528 - val_accuracy: 0.7809 - val_f1: 0.7813 - val_recall: 0.7809 - val_precision: 0.7882
Epoch 57/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788722 — val_precision: 0.792833 — val_recall: 0.788218
Epoch 57: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 33ms/step - loss: 0.0780 - accuracy: 0.9749 - val_loss: 1.0710 - val_accuracy: 0.7882 - val_f1: 0.7887 - val_recall: 0.7882 - val_precision: 0.7928
Epoch 58/100
107/107 [==============================] - 0s 3ms/step
— val_f1: 0.784387 — val_precision: 0.791285 — val_recall: 0.784389
Epoch 58: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 32ms/step - loss: 0.0785 - accuracy: 0.9764 - val_loss: 1.1301 - val_accuracy: 0.7844 - val_f1: 0.7844 - val_recall: 0.7844 - val_precision: 0.7913
Epoch 59/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.784046 — val_precision: 0.793913 — val_recall: 0.783505
Epoch 59: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 17ms/step - loss: 0.0872 - accuracy: 0.9726 - val_loss: 1.1231 - val_accuracy: 0.7835 - val_f1: 0.7840 - val_recall: 0.7835 - val_precision: 0.7939
Epoch 60/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787095 — val_precision: 0.793294 — val_recall: 0.786451
Epoch 60: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 20ms/step - loss: 0.0831 - accuracy: 0.9740 - val_loss: 1.0921 - val_accuracy: 0.7865 - val_f1: 0.7871 - val_recall: 0.7865 - val_precision: 0.7933
Epoch 61/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.784726 — val_precision: 0.792139 — val_recall: 0.784683
Epoch 61: val_accuracy did not improve from 0.79146
31/31 [==============================] - 1s 21ms/step - loss: 0.0837 - accuracy: 0.9730 - val_loss: 1.0744 - val_accuracy: 0.7847 - val_f1: 0.7847 - val_recall: 0.7847 - val_precision: 0.7921
Epoch 62/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792942 — val_precision: 0.799016 — val_recall: 0.792636
Epoch 62: val_accuracy improved from 0.79146 to 0.79264, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 18ms/step - loss: 0.0844 - accuracy: 0.9730 - val_loss: 1.1021 - val_accuracy: 0.7926 - val_f1: 0.7929 - val_recall: 0.7926 - val_precision: 0.7990
Epoch 63/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792080 — val_precision: 0.798898 — val_recall: 0.792047
Epoch 63: val_accuracy did not improve from 0.79264
31/31 [==============================] - 1s 20ms/step - loss: 0.0895 - accuracy: 0.9688 - val_loss: 1.0842 - val_accuracy: 0.7920 - val_f1: 0.7921 - val_recall: 0.7920 - val_precision: 0.7989
Epoch 64/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792706 — val_precision: 0.797540 — val_recall: 0.792931
Epoch 64: val_accuracy improved from 0.79264 to 0.79293, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 21ms/step - loss: 0.0755 - accuracy: 0.9756 - val_loss: 1.0955 - val_accuracy: 0.7929 - val_f1: 0.7927 - val_recall: 0.7929 - val_precision: 0.7975
Epoch 65/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.782751 — val_precision: 0.791943 — val_recall: 0.782327
Epoch 65: val_accuracy did not improve from 0.79293
31/31 [==============================] - 1s 17ms/step - loss: 0.0850 - accuracy: 0.9715 - val_loss: 1.1154 - val_accuracy: 0.7823 - val_f1: 0.7828 - val_recall: 0.7823 - val_precision: 0.7919
Epoch 66/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.786817 — val_precision: 0.790142 — val_recall: 0.788513
Epoch 66: val_accuracy did not improve from 0.79293
31/31 [==============================] - 1s 17ms/step - loss: 0.0737 - accuracy: 0.9766 - val_loss: 1.0712 - val_accuracy: 0.7885 - val_f1: 0.7868 - val_recall: 0.7885 - val_precision: 0.7901
Epoch 67/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.791184 — val_precision: 0.797511 — val_recall: 0.790869
Epoch 67: val_accuracy did not improve from 0.79293
31/31 [==============================] - 1s 20ms/step - loss: 0.0638 - accuracy: 0.9793 - val_loss: 1.1588 - val_accuracy: 0.7909 - val_f1: 0.7912 - val_recall: 0.7909 - val_precision: 0.7975
Epoch 68/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.786867 — val_precision: 0.796056 — val_recall: 0.785567
Epoch 68: val_accuracy did not improve from 0.79293
31/31 [==============================] - 1s 17ms/step - loss: 0.0702 - accuracy: 0.9780 - val_loss: 1.1352 - val_accuracy: 0.7856 - val_f1: 0.7869 - val_recall: 0.7856 - val_precision: 0.7961
Epoch 69/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.786355 — val_precision: 0.790820 — val_recall: 0.786745
Epoch 69: val_accuracy did not improve from 0.79293
31/31 [==============================] - 1s 16ms/step - loss: 0.0837 - accuracy: 0.9735 - val_loss: 1.1023 - val_accuracy: 0.7867 - val_f1: 0.7864 - val_recall: 0.7867 - val_precision: 0.7908
Epoch 70/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.795276 — val_precision: 0.799089 — val_recall: 0.795876
Epoch 70: val_accuracy improved from 0.79293 to 0.79588, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 21ms/step - loss: 0.0721 - accuracy: 0.9770 - val_loss: 1.1260 - val_accuracy: 0.7959 - val_f1: 0.7953 - val_recall: 0.7959 - val_precision: 0.7991
Epoch 71/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.795421 — val_precision: 0.804136 — val_recall: 0.793520
Epoch 71: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0698 - accuracy: 0.9785 - val_loss: 1.1637 - val_accuracy: 0.7935 - val_f1: 0.7954 - val_recall: 0.7935 - val_precision: 0.8041
Epoch 72/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788375 — val_precision: 0.795527 — val_recall: 0.787923
Epoch 72: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 19ms/step - loss: 0.0663 - accuracy: 0.9778 - val_loss: 1.1729 - val_accuracy: 0.7879 - val_f1: 0.7884 - val_recall: 0.7879 - val_precision: 0.7955
Epoch 73/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790505 — val_precision: 0.794103 — val_recall: 0.791753
Epoch 73: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0728 - accuracy: 0.9770 - val_loss: 1.1389 - val_accuracy: 0.7918 - val_f1: 0.7905 - val_recall: 0.7918 - val_precision: 0.7941
Epoch 74/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790306 — val_precision: 0.797772 — val_recall: 0.790280
Epoch 74: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0785 - accuracy: 0.9737 - val_loss: 1.1296 - val_accuracy: 0.7903 - val_f1: 0.7903 - val_recall: 0.7903 - val_precision: 0.7978
Epoch 75/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788259 — val_precision: 0.796144 — val_recall: 0.787040
Epoch 75: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0810 - accuracy: 0.9742 - val_loss: 1.1460 - val_accuracy: 0.7870 - val_f1: 0.7883 - val_recall: 0.7870 - val_precision: 0.7961
Epoch 76/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788786 — val_precision: 0.790186 — val_recall: 0.789691
Epoch 76: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 21ms/step - loss: 0.0785 - accuracy: 0.9741 - val_loss: 1.0979 - val_accuracy: 0.7897 - val_f1: 0.7888 - val_recall: 0.7897 - val_precision: 0.7902
Epoch 77/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790322 — val_precision: 0.799984 — val_recall: 0.790574
Epoch 77: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 32ms/step - loss: 0.0689 - accuracy: 0.9780 - val_loss: 1.1839 - val_accuracy: 0.7906 - val_f1: 0.7903 - val_recall: 0.7906 - val_precision: 0.8000
Epoch 78/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788181 — val_precision: 0.790259 — val_recall: 0.789691
Epoch 78: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 32ms/step - loss: 0.0639 - accuracy: 0.9802 - val_loss: 1.1536 - val_accuracy: 0.7897 - val_f1: 0.7882 - val_recall: 0.7897 - val_precision: 0.7903
Epoch 79/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790356 — val_precision: 0.795682 — val_recall: 0.790869
Epoch 79: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 19ms/step - loss: 0.0661 - accuracy: 0.9795 - val_loss: 1.1305 - val_accuracy: 0.7909 - val_f1: 0.7904 - val_recall: 0.7909 - val_precision: 0.7957
Epoch 80/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.781546 — val_precision: 0.793769 — val_recall: 0.780854
Epoch 80: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 20ms/step - loss: 0.0607 - accuracy: 0.9809 - val_loss: 1.2123 - val_accuracy: 0.7809 - val_f1: 0.7815 - val_recall: 0.7809 - val_precision: 0.7938
Epoch 81/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.789275 — val_precision: 0.793089 — val_recall: 0.789396
Epoch 81: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0701 - accuracy: 0.9771 - val_loss: 1.2068 - val_accuracy: 0.7894 - val_f1: 0.7893 - val_recall: 0.7894 - val_precision: 0.7931
Epoch 82/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.787920 — val_precision: 0.795878 — val_recall: 0.787629
Epoch 82: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 19ms/step - loss: 0.0736 - accuracy: 0.9758 - val_loss: 1.1492 - val_accuracy: 0.7876 - val_f1: 0.7879 - val_recall: 0.7876 - val_precision: 0.7959
Epoch 83/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792604 — val_precision: 0.798118 — val_recall: 0.793520
Epoch 83: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0727 - accuracy: 0.9754 - val_loss: 1.1474 - val_accuracy: 0.7935 - val_f1: 0.7926 - val_recall: 0.7935 - val_precision: 0.7981
Epoch 84/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792603 — val_precision: 0.796395 — val_recall: 0.792931
Epoch 84: val_accuracy did not improve from 0.79588
31/31 [==============================] - 0s 16ms/step - loss: 0.0641 - accuracy: 0.9776 - val_loss: 1.1645 - val_accuracy: 0.7929 - val_f1: 0.7926 - val_recall: 0.7929 - val_precision: 0.7964
Epoch 85/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.782297 — val_precision: 0.797066 — val_recall: 0.781149
Epoch 85: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 17ms/step - loss: 0.0770 - accuracy: 0.9746 - val_loss: 1.2465 - val_accuracy: 0.7811 - val_f1: 0.7823 - val_recall: 0.7811 - val_precision: 0.7971
Epoch 86/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.781487 — val_precision: 0.789638 — val_recall: 0.782916
Epoch 86: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 20ms/step - loss: 0.0730 - accuracy: 0.9751 - val_loss: 1.2079 - val_accuracy: 0.7829 - val_f1: 0.7815 - val_recall: 0.7829 - val_precision: 0.7896
Epoch 87/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.784145 — val_precision: 0.790035 — val_recall: 0.783800
Epoch 87: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 20ms/step - loss: 0.0795 - accuracy: 0.9713 - val_loss: 1.1590 - val_accuracy: 0.7838 - val_f1: 0.7841 - val_recall: 0.7838 - val_precision: 0.7900
Epoch 88/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.791280 — val_precision: 0.796117 — val_recall: 0.789985
Epoch 88: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 18ms/step - loss: 0.0617 - accuracy: 0.9792 - val_loss: 1.1695 - val_accuracy: 0.7900 - val_f1: 0.7913 - val_recall: 0.7900 - val_precision: 0.7961
Epoch 89/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788847 — val_precision: 0.793404 — val_recall: 0.788513
Epoch 89: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 18ms/step - loss: 0.0648 - accuracy: 0.9797 - val_loss: 1.1598 - val_accuracy: 0.7885 - val_f1: 0.7888 - val_recall: 0.7885 - val_precision: 0.7934
Epoch 90/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.785127 — val_precision: 0.790657 — val_recall: 0.783505
Epoch 90: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 18ms/step - loss: 0.0640 - accuracy: 0.9804 - val_loss: 1.2072 - val_accuracy: 0.7835 - val_f1: 0.7851 - val_recall: 0.7835 - val_precision: 0.7907
Epoch 91/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.785048 — val_precision: 0.791125 — val_recall: 0.783800
Epoch 91: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 19ms/step - loss: 0.0508 - accuracy: 0.9832 - val_loss: 1.2209 - val_accuracy: 0.7838 - val_f1: 0.7850 - val_recall: 0.7838 - val_precision: 0.7911
Epoch 92/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.790150 — val_precision: 0.794866 — val_recall: 0.788807
Epoch 92: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 18ms/step - loss: 0.0586 - accuracy: 0.9812 - val_loss: 1.2035 - val_accuracy: 0.7888 - val_f1: 0.7901 - val_recall: 0.7888 - val_precision: 0.7949
Epoch 93/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792711 — val_precision: 0.795991 — val_recall: 0.792342
Epoch 93: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 19ms/step - loss: 0.0556 - accuracy: 0.9813 - val_loss: 1.1716 - val_accuracy: 0.7923 - val_f1: 0.7927 - val_recall: 0.7923 - val_precision: 0.7960
Epoch 94/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.789314 — val_precision: 0.793773 — val_recall: 0.789691
Epoch 94: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 20ms/step - loss: 0.0503 - accuracy: 0.9840 - val_loss: 1.2211 - val_accuracy: 0.7897 - val_f1: 0.7893 - val_recall: 0.7897 - val_precision: 0.7938
Epoch 95/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.784903 — val_precision: 0.786867 — val_recall: 0.785567
Epoch 95: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 20ms/step - loss: 0.0573 - accuracy: 0.9812 - val_loss: 1.2125 - val_accuracy: 0.7856 - val_f1: 0.7849 - val_recall: 0.7856 - val_precision: 0.7869
Epoch 96/100
107/107 [==============================] - 0s 3ms/step
— val_f1: 0.794736 — val_precision: 0.798928 — val_recall: 0.794698
Epoch 96: val_accuracy did not improve from 0.79588
31/31 [==============================] - 1s 24ms/step - loss: 0.0600 - accuracy: 0.9788 - val_loss: 1.2080 - val_accuracy: 0.7947 - val_f1: 0.7947 - val_recall: 0.7947 - val_precision: 0.7989
Epoch 97/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.797165 — val_precision: 0.800472 — val_recall: 0.797349
Epoch 97: val_accuracy improved from 0.79588 to 0.79735, saving model to checkpoints/weights2.hdf5
31/31 [==============================] - 1s 37ms/step - loss: 0.0482 - accuracy: 0.9826 - val_loss: 1.2361 - val_accuracy: 0.7973 - val_f1: 0.7972 - val_recall: 0.7973 - val_precision: 0.8005
Epoch 98/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.792281 — val_precision: 0.794424 — val_recall: 0.792931
Epoch 98: val_accuracy did not improve from 0.79735
31/31 [==============================] - 1s 18ms/step - loss: 0.0548 - accuracy: 0.9816 - val_loss: 1.2061 - val_accuracy: 0.7929 - val_f1: 0.7923 - val_recall: 0.7929 - val_precision: 0.7944
Epoch 99/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.788885 — val_precision: 0.796934 — val_recall: 0.787629
Epoch 99: val_accuracy did not improve from 0.79735
31/31 [==============================] - 1s 21ms/step - loss: 0.0505 - accuracy: 0.9846 - val_loss: 1.2717 - val_accuracy: 0.7876 - val_f1: 0.7889 - val_recall: 0.7876 - val_precision: 0.7969
Epoch 100/100
107/107 [==============================] - 0s 2ms/step
— val_f1: 0.793650 — val_precision: 0.801646 — val_recall: 0.792931
Epoch 100: val_accuracy did not improve from 0.79735
31/31 [==============================] - 1s 19ms/step - loss: 0.0558 - accuracy: 0.9817 - val_loss: 1.2948 - val_accuracy: 0.7929 - val_f1: 0.7937 - val_recall: 0.7929 - val_precision: 0.8016
Training time: 00:01:09 sec
%matplotlib inline
import matplotlib.pyplot as plt
# summarize history for accuracy
plt.plot(history2.history['accuracy'])
plt.plot(history2.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'dev'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(history2.history['loss'])
plt.plot(history2.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'dev'], loc='upper right')
plt.show()
import warnings
from tensorflow.keras import backend as K
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import Adam
from sklearn.metrics import classification_report
with tf.device('/device:GPU:0'):
model2 = Sequential()
model2.add(Dense(1024, input_dim=X_train_centroids.shape[1] , activation='relu'))
model2.add(Dense(1024, activation='relu'))
model2.add(Dense(512, activation='relu'))
model2.add(Dense(len(twenty_train.target_names), activation='softmax'))
# Load weights from the pre-trained model
model2.load_weights("checkpoints/weights2.hdf5")
model2.compile(
loss='categorical_crossentropy',
optimizer=Adam(learning_rate=0.001),
metrics=["accuracy"]
)
predictions = np.argmax(model2.predict(X_val_centroids), -1)
print(classification_report(y_val, predictions, target_names=twenty_train.target_names))
107/107 [==============================] - 0s 2ms/step
precision recall f1-score support
alt.atheism 0.75 0.84 0.79 160
comp.graphics 0.64 0.75 0.69 165
comp.os.ms-windows.misc 0.75 0.77 0.76 189
comp.sys.ibm.pc.hardware 0.58 0.63 0.60 168
comp.sys.mac.hardware 0.70 0.66 0.68 182
comp.windows.x 0.82 0.70 0.76 168
misc.forsale 0.78 0.73 0.75 182
rec.autos 0.80 0.76 0.78 181
rec.motorcycles 0.83 0.78 0.80 184
rec.sport.baseball 0.94 0.87 0.90 169
rec.sport.hockey 0.81 0.97 0.88 175
sci.crypt 0.87 0.92 0.89 177
sci.electronics 0.83 0.74 0.78 173
sci.med 0.87 0.96 0.91 181
sci.space 0.93 0.90 0.92 181
soc.religion.christian 0.84 0.79 0.81 177
talk.politics.guns 0.81 0.85 0.83 177
talk.politics.mideast 0.93 0.88 0.90 170
talk.politics.misc 0.84 0.75 0.79 135
talk.religion.misc 0.64 0.59 0.62 101
accuracy 0.80 3395
macro avg 0.80 0.79 0.79 3395
weighted avg 0.80 0.80 0.80 3395
from sklearn.metrics import accuracy_score
predictions = np.argmax(model2.predict(X_val_centroids), -1)
print(f'Validation Accuracy: {accuracy_score(y_val, predictions)*100:.2f}%')
predictions = np.argmax(model2.predict(X_test_centroids), -1)
print(f'Test Accuracy:{accuracy_score(y_test, predictions)*100:.2f}%')
107/107 [==============================] - 0s 2ms/step Validation Accuracy: 79.73% 236/236 [==============================] - 0s 2ms/step Test Accuracy:70.61%
| Model Name | Val Accuracy | Test Accuracy |
|---|---|---|
| Logistic Regression + TF-IDF | 83.74% | 76.83% |
| MLP + TF-IDF | 86.95% | 77.10% |
| MLP + Word2Vec Centroids | 79.73% | 70.61% |