From 234707133c519c93aa1cff01fd8df2788f701a1b Mon Sep 17 00:00:00 2001 From: mrt Date: Fri, 2 Jun 2023 15:04:27 +0200 Subject: [PATCH] Added MobileNetV2 model experiments --- mobilenetV2_train.py | 205 +++++++++ saved_results/Models/MobileNet_V2/history.txt | 389 ++++++++++++++++++ .../Models/MobileNet_V2/training_log.csv | 26 ++ 3 files changed, 620 insertions(+) create mode 100644 mobilenetV2_train.py create mode 100644 saved_results/Models/MobileNet_V2/history.txt create mode 100644 saved_results/Models/MobileNet_V2/training_log.csv diff --git a/mobilenetV2_train.py b/mobilenetV2_train.py new file mode 100644 index 0000000..0998816 --- /dev/null +++ b/mobilenetV2_train.py @@ -0,0 +1,205 @@ +import datetime +import tensorflow as tf +from tensorflow.keras.layers import GlobalAvgPool2D, Dense +from tensorflow.keras.initializers import GlorotUniform +from tensorflow.keras.models import Model +import matplotlib.pyplot as plt +from data_generator import create_data_generators + + +""" +HYPERPARAMETERS +""" + +# Distribute training +strategy = tf.distribute.MirroredStrategy() + +# Input +image_size = 224 + +# Hyper-parameters +batch_size = 128 * strategy.num_replicas_in_sync +num_epochs = 25 +learning_rate = 0.0001 +num_classes = 8631 + + +""" +DATASET +""" + +train_gen, val_gen, test_gen = create_data_generators(target_size=image_size, batch_size=batch_size) + + +""" +MODEL +""" + +with strategy.scope(): + mobilenet_model = tf.keras.applications.MobileNetV2( + include_top=False, + weights="imagenet", + input_shape=(image_size, image_size, 3), + pooling=None, + ) + Y = GlobalAvgPool2D()(mobilenet_model.output) + Y = Dense(units=num_classes, activation='softmax', kernel_initializer=GlorotUniform())(Y) + mobilenet_model = Model(inputs=mobilenet_model.input, outputs=Y, name='MobileNetV2') +mobilenet_model.summary(line_length=150) + + +""" +MODEL COMPILE +""" + +with strategy.scope(): + optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate) + mobilenet_model.compile( + optimizer=optimizer, + loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False), + metrics=[ + tf.keras.metrics.SparseCategoricalAccuracy(name='accuracy'), + tf.keras.metrics.SparseTopKCategoricalAccuracy(k=5, name='top-5-accuracy'), + tf.keras.metrics.SparseTopKCategoricalAccuracy(k=10, name='top-10-accuracy'), + tf.keras.metrics.SparseTopKCategoricalAccuracy(k=100, name='top-100-accuracy'), + ] + ) + + +""" +CALLBACKS +""" + +# checkpoint callback +checkpoint_filepath = "./tmp/checkpoint" +checkpoint_callback = tf.keras.callbacks.ModelCheckpoint( + filepath=checkpoint_filepath, + monitor='val_accuracy', + verbose=1, + save_best_only=True, + save_weights_only=True, + mode='max', + save_freq='epoch', +) + +# csv logger callback +csv_filepath = "./tmp/training_log.csv" +csv_logger = tf.keras.callbacks.CSVLogger( + csv_filepath, + separator=',', + append=True, +) + +# early stopping callback +early_stopping = tf.keras.callbacks.EarlyStopping( + monitor='val_loss', + min_delta=0, + patience=7, + verbose=0, + mode='auto', +) + +# tensorboard callback +tb_callback = tf.keras.callbacks.TensorBoard( + log_dir="./tmp/logs" + datetime.datetime.now().strftime("%d%m%Y-%H%M%S"), + histogram_freq=1, + write_graph=True, + update_freq='epoch', +) + + +""" +LOAD PRE-TRAINED MODEL WEIGHTS +""" + +# Load pre-trained model weights before training +best_weights = "./saved_results/Models/MobileNet_V2/checkpoint" +mobilenet_model.load_weights(best_weights) + + +""" +TRAIN THE MODEL +""" + +history = mobilenet_model.fit( + train_gen, + epochs=num_epochs, + validation_data=val_gen, + callbacks=[ + checkpoint_callback, + csv_logger, + early_stopping, + tb_callback, + ] +) + + +""" +EVALUATE THE MODEL +""" + +# Load best weights seen during training +mobilenet_model.load_weights(checkpoint_filepath) + +# Evaluate the model +loss, accuracy, top_five_accuracy, top_ten_accuracy, top_hundred_accuracy = mobilenet_model.evaluate(test_gen) +accuracy = round(accuracy * 100, 2) +top_five_accuracy = round(top_five_accuracy * 100, 2) +top_ten_accuracy = round(top_ten_accuracy * 100, 2) +top_hundred_accuracy = round(top_hundred_accuracy * 100, 2) +print(f"Accuracy on the test set: {accuracy}%.") +print(f"Top 5 Accuracy on the test set: {top_five_accuracy}%.") +print(f"Top 10 Accuracy on the test set: {top_ten_accuracy}%.") +print(f"Top 100 Accuracy on the test set: {top_hundred_accuracy}%.") + + +""" +HISTORY FIGURES +""" + +# PLOTS +# 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', 'val'], loc='upper left') +plt.savefig('./tmp/model accuracy.png') +plt.close() +# Top 5 accuracy +plt.plot(history.history['top-5-accuracy']) +plt.plot(history.history['val_top-5-accuracy']) +plt.title('model top 5 accuracy') +plt.ylabel('top 5 accuracy') +plt.xlabel('epoch') +plt.legend(['train', 'val'], loc='upper left') +plt.savefig('./tmp/model top 5 accuracy.png') +plt.close() +# Top 10 accuracy +plt.plot(history.history['top-10-accuracy']) +plt.plot(history.history['val_top-10-accuracy']) +plt.title('model top 10 accuracy') +plt.ylabel('top 10 accuracy') +plt.xlabel('epoch') +plt.legend(['train', 'val'], loc='upper left') +plt.savefig('./tmp/model top 10 accuracy.png') +plt.close() +# Top 100 accuracy +plt.plot(history.history['top-100-accuracy']) +plt.plot(history.history['val_top-100-accuracy']) +plt.title('model top 100 accuracy') +plt.ylabel('top 100 accuracy') +plt.xlabel('epoch') +plt.legend(['train', 'val'], loc='upper left') +plt.savefig('./tmp/model top 100 accuracy.png') +plt.close() +# 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', 'val'], loc='upper left') +plt.savefig('./tmp/model loss.png') +plt.close() diff --git a/saved_results/Models/MobileNet_V2/history.txt b/saved_results/Models/MobileNet_V2/history.txt new file mode 100644 index 0000000..0e90b0e --- /dev/null +++ b/saved_results/Models/MobileNet_V2/history.txt @@ -0,0 +1,389 @@ +[INFO] Num images for train: 2827701 -> train_ds: 2827701 +[INFO] Num images for validation: 157094 -> val_ds: 157094 +[INFO] Num images for test: 157094 -> test_ds: 157095 +Model: "MobileNetV2" +______________________________________________________________________________________________________________________________________________________ + Layer (type) Output Shape Param # Connected to +====================================================================================================================================================== + input_1 (InputLayer) [(None, 224, 224, 3)] 0 [] + + Conv1 (Conv2D) (None, 112, 112, 32) 864 ['input_1[0][0]'] + + bn_Conv1 (BatchNormalization) (None, 112, 112, 32) 128 ['Conv1[0][0]'] + + Conv1_relu (ReLU) (None, 112, 112, 32) 0 ['bn_Conv1[0][0]'] + + expanded_conv_depthwise (DepthwiseConv2D) (None, 112, 112, 32) 288 ['Conv1_relu[0][0]'] + + expanded_conv_depthwise_BN (BatchNormalization) (None, 112, 112, 32) 128 ['expanded_conv_depthwise[0][0]'] + + expanded_conv_depthwise_relu (ReLU) (None, 112, 112, 32) 0 ['expanded_conv_depthwise_BN[0][0]'] + + expanded_conv_project (Conv2D) (None, 112, 112, 16) 512 ['expanded_conv_depthwise_relu[0][0]'] + + expanded_conv_project_BN (BatchNormalization) (None, 112, 112, 16) 64 ['expanded_conv_project[0][0]'] + + block_1_expand (Conv2D) (None, 112, 112, 96) 1536 ['expanded_conv_project_BN[0][0]'] + + block_1_expand_BN (BatchNormalization) (None, 112, 112, 96) 384 ['block_1_expand[0][0]'] + + block_1_expand_relu (ReLU) (None, 112, 112, 96) 0 ['block_1_expand_BN[0][0]'] + + block_1_pad (ZeroPadding2D) (None, 113, 113, 96) 0 ['block_1_expand_relu[0][0]'] + + block_1_depthwise (DepthwiseConv2D) (None, 56, 56, 96) 864 ['block_1_pad[0][0]'] + + block_1_depthwise_BN (BatchNormalization) (None, 56, 56, 96) 384 ['block_1_depthwise[0][0]'] + + block_1_depthwise_relu (ReLU) (None, 56, 56, 96) 0 ['block_1_depthwise_BN[0][0]'] + + block_1_project (Conv2D) (None, 56, 56, 24) 2304 ['block_1_depthwise_relu[0][0]'] + + block_1_project_BN (BatchNormalization) (None, 56, 56, 24) 96 ['block_1_project[0][0]'] + + block_2_expand (Conv2D) (None, 56, 56, 144) 3456 ['block_1_project_BN[0][0]'] + + block_2_expand_BN (BatchNormalization) (None, 56, 56, 144) 576 ['block_2_expand[0][0]'] + + block_2_expand_relu (ReLU) (None, 56, 56, 144) 0 ['block_2_expand_BN[0][0]'] + + block_2_depthwise (DepthwiseConv2D) (None, 56, 56, 144) 1296 ['block_2_expand_relu[0][0]'] + + block_2_depthwise_BN (BatchNormalization) (None, 56, 56, 144) 576 ['block_2_depthwise[0][0]'] + + block_2_depthwise_relu (ReLU) (None, 56, 56, 144) 0 ['block_2_depthwise_BN[0][0]'] + + block_2_project (Conv2D) (None, 56, 56, 24) 3456 ['block_2_depthwise_relu[0][0]'] + + block_2_project_BN (BatchNormalization) (None, 56, 56, 24) 96 ['block_2_project[0][0]'] + + block_2_add (Add) (None, 56, 56, 24) 0 ['block_1_project_BN[0][0]', + 'block_2_project_BN[0][0]'] + + block_3_expand (Conv2D) (None, 56, 56, 144) 3456 ['block_2_add[0][0]'] + + block_3_expand_BN (BatchNormalization) (None, 56, 56, 144) 576 ['block_3_expand[0][0]'] + + block_3_expand_relu (ReLU) (None, 56, 56, 144) 0 ['block_3_expand_BN[0][0]'] + + block_3_pad (ZeroPadding2D) (None, 57, 57, 144) 0 ['block_3_expand_relu[0][0]'] + + block_3_depthwise (DepthwiseConv2D) (None, 28, 28, 144) 1296 ['block_3_pad[0][0]'] + + block_3_depthwise_BN (BatchNormalization) (None, 28, 28, 144) 576 ['block_3_depthwise[0][0]'] + + block_3_depthwise_relu (ReLU) (None, 28, 28, 144) 0 ['block_3_depthwise_BN[0][0]'] + + block_3_project (Conv2D) (None, 28, 28, 32) 4608 ['block_3_depthwise_relu[0][0]'] + + block_3_project_BN (BatchNormalization) (None, 28, 28, 32) 128 ['block_3_project[0][0]'] + + block_4_expand (Conv2D) (None, 28, 28, 192) 6144 ['block_3_project_BN[0][0]'] + + block_4_expand_BN (BatchNormalization) (None, 28, 28, 192) 768 ['block_4_expand[0][0]'] + + block_4_expand_relu (ReLU) (None, 28, 28, 192) 0 ['block_4_expand_BN[0][0]'] + + block_4_depthwise (DepthwiseConv2D) (None, 28, 28, 192) 1728 ['block_4_expand_relu[0][0]'] + + block_4_depthwise_BN (BatchNormalization) (None, 28, 28, 192) 768 ['block_4_depthwise[0][0]'] + + block_4_depthwise_relu (ReLU) (None, 28, 28, 192) 0 ['block_4_depthwise_BN[0][0]'] + + block_4_project (Conv2D) (None, 28, 28, 32) 6144 ['block_4_depthwise_relu[0][0]'] + + block_4_project_BN (BatchNormalization) (None, 28, 28, 32) 128 ['block_4_project[0][0]'] + + block_4_add (Add) (None, 28, 28, 32) 0 ['block_3_project_BN[0][0]', + 'block_4_project_BN[0][0]'] + + block_5_expand (Conv2D) (None, 28, 28, 192) 6144 ['block_4_add[0][0]'] + + block_5_expand_BN (BatchNormalization) (None, 28, 28, 192) 768 ['block_5_expand[0][0]'] + + block_5_expand_relu (ReLU) (None, 28, 28, 192) 0 ['block_5_expand_BN[0][0]'] + + block_5_depthwise (DepthwiseConv2D) (None, 28, 28, 192) 1728 ['block_5_expand_relu[0][0]'] + + block_5_depthwise_BN (BatchNormalization) (None, 28, 28, 192) 768 ['block_5_depthwise[0][0]'] + + block_5_depthwise_relu (ReLU) (None, 28, 28, 192) 0 ['block_5_depthwise_BN[0][0]'] + + block_5_project (Conv2D) (None, 28, 28, 32) 6144 ['block_5_depthwise_relu[0][0]'] + + block_5_project_BN (BatchNormalization) (None, 28, 28, 32) 128 ['block_5_project[0][0]'] + + block_5_add (Add) (None, 28, 28, 32) 0 ['block_4_add[0][0]', + 'block_5_project_BN[0][0]'] + + block_6_expand (Conv2D) (None, 28, 28, 192) 6144 ['block_5_add[0][0]'] + + block_6_expand_BN (BatchNormalization) (None, 28, 28, 192) 768 ['block_6_expand[0][0]'] + + block_6_expand_relu (ReLU) (None, 28, 28, 192) 0 ['block_6_expand_BN[0][0]'] + + block_6_pad (ZeroPadding2D) (None, 29, 29, 192) 0 ['block_6_expand_relu[0][0]'] + + block_6_depthwise (DepthwiseConv2D) (None, 14, 14, 192) 1728 ['block_6_pad[0][0]'] + + block_6_depthwise_BN (BatchNormalization) (None, 14, 14, 192) 768 ['block_6_depthwise[0][0]'] + + block_6_depthwise_relu (ReLU) (None, 14, 14, 192) 0 ['block_6_depthwise_BN[0][0]'] + + block_6_project (Conv2D) (None, 14, 14, 64) 12288 ['block_6_depthwise_relu[0][0]'] + + block_6_project_BN (BatchNormalization) (None, 14, 14, 64) 256 ['block_6_project[0][0]'] + + block_7_expand (Conv2D) (None, 14, 14, 384) 24576 ['block_6_project_BN[0][0]'] + + block_7_expand_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_7_expand[0][0]'] + + block_7_expand_relu (ReLU) (None, 14, 14, 384) 0 ['block_7_expand_BN[0][0]'] + + block_7_depthwise (DepthwiseConv2D) (None, 14, 14, 384) 3456 ['block_7_expand_relu[0][0]'] + + block_7_depthwise_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_7_depthwise[0][0]'] + + block_7_depthwise_relu (ReLU) (None, 14, 14, 384) 0 ['block_7_depthwise_BN[0][0]'] + + block_7_project (Conv2D) (None, 14, 14, 64) 24576 ['block_7_depthwise_relu[0][0]'] + + block_7_project_BN (BatchNormalization) (None, 14, 14, 64) 256 ['block_7_project[0][0]'] + + block_7_add (Add) (None, 14, 14, 64) 0 ['block_6_project_BN[0][0]', + 'block_7_project_BN[0][0]'] + + block_8_expand (Conv2D) (None, 14, 14, 384) 24576 ['block_7_add[0][0]'] + + block_8_expand_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_8_expand[0][0]'] + + block_8_expand_relu (ReLU) (None, 14, 14, 384) 0 ['block_8_expand_BN[0][0]'] + + block_8_depthwise (DepthwiseConv2D) (None, 14, 14, 384) 3456 ['block_8_expand_relu[0][0]'] + + block_8_depthwise_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_8_depthwise[0][0]'] + + block_8_depthwise_relu (ReLU) (None, 14, 14, 384) 0 ['block_8_depthwise_BN[0][0]'] + + block_8_project (Conv2D) (None, 14, 14, 64) 24576 ['block_8_depthwise_relu[0][0]'] + + block_8_project_BN (BatchNormalization) (None, 14, 14, 64) 256 ['block_8_project[0][0]'] + + block_8_add (Add) (None, 14, 14, 64) 0 ['block_7_add[0][0]', + 'block_8_project_BN[0][0]'] + + block_9_expand (Conv2D) (None, 14, 14, 384) 24576 ['block_8_add[0][0]'] + + block_9_expand_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_9_expand[0][0]'] + + block_9_expand_relu (ReLU) (None, 14, 14, 384) 0 ['block_9_expand_BN[0][0]'] + + block_9_depthwise (DepthwiseConv2D) (None, 14, 14, 384) 3456 ['block_9_expand_relu[0][0]'] + + block_9_depthwise_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_9_depthwise[0][0]'] + + block_9_depthwise_relu (ReLU) (None, 14, 14, 384) 0 ['block_9_depthwise_BN[0][0]'] + + block_9_project (Conv2D) (None, 14, 14, 64) 24576 ['block_9_depthwise_relu[0][0]'] + + block_9_project_BN (BatchNormalization) (None, 14, 14, 64) 256 ['block_9_project[0][0]'] + + block_9_add (Add) (None, 14, 14, 64) 0 ['block_8_add[0][0]', + 'block_9_project_BN[0][0]'] + + block_10_expand (Conv2D) (None, 14, 14, 384) 24576 ['block_9_add[0][0]'] + + block_10_expand_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_10_expand[0][0]'] + + block_10_expand_relu (ReLU) (None, 14, 14, 384) 0 ['block_10_expand_BN[0][0]'] + + block_10_depthwise (DepthwiseConv2D) (None, 14, 14, 384) 3456 ['block_10_expand_relu[0][0]'] + + block_10_depthwise_BN (BatchNormalization) (None, 14, 14, 384) 1536 ['block_10_depthwise[0][0]'] + + block_10_depthwise_relu (ReLU) (None, 14, 14, 384) 0 ['block_10_depthwise_BN[0][0]'] + + block_10_project (Conv2D) (None, 14, 14, 96) 36864 ['block_10_depthwise_relu[0][0]'] + + block_10_project_BN (BatchNormalization) (None, 14, 14, 96) 384 ['block_10_project[0][0]'] + + block_11_expand (Conv2D) (None, 14, 14, 576) 55296 ['block_10_project_BN[0][0]'] + + block_11_expand_BN (BatchNormalization) (None, 14, 14, 576) 2304 ['block_11_expand[0][0]'] + + block_11_expand_relu (ReLU) (None, 14, 14, 576) 0 ['block_11_expand_BN[0][0]'] + + block_11_depthwise (DepthwiseConv2D) (None, 14, 14, 576) 5184 ['block_11_expand_relu[0][0]'] + + block_11_depthwise_BN (BatchNormalization) (None, 14, 14, 576) 2304 ['block_11_depthwise[0][0]'] + + block_11_depthwise_relu (ReLU) (None, 14, 14, 576) 0 ['block_11_depthwise_BN[0][0]'] + + block_11_project (Conv2D) (None, 14, 14, 96) 55296 ['block_11_depthwise_relu[0][0]'] + + block_11_project_BN (BatchNormalization) (None, 14, 14, 96) 384 ['block_11_project[0][0]'] + + block_11_add (Add) (None, 14, 14, 96) 0 ['block_10_project_BN[0][0]', + 'block_11_project_BN[0][0]'] + + block_12_expand (Conv2D) (None, 14, 14, 576) 55296 ['block_11_add[0][0]'] + + block_12_expand_BN (BatchNormalization) (None, 14, 14, 576) 2304 ['block_12_expand[0][0]'] + + block_12_expand_relu (ReLU) (None, 14, 14, 576) 0 ['block_12_expand_BN[0][0]'] + + block_12_depthwise (DepthwiseConv2D) (None, 14, 14, 576) 5184 ['block_12_expand_relu[0][0]'] + + block_12_depthwise_BN (BatchNormalization) (None, 14, 14, 576) 2304 ['block_12_depthwise[0][0]'] + + block_12_depthwise_relu (ReLU) (None, 14, 14, 576) 0 ['block_12_depthwise_BN[0][0]'] + + block_12_project (Conv2D) (None, 14, 14, 96) 55296 ['block_12_depthwise_relu[0][0]'] + + block_12_project_BN (BatchNormalization) (None, 14, 14, 96) 384 ['block_12_project[0][0]'] + + block_12_add (Add) (None, 14, 14, 96) 0 ['block_11_add[0][0]', + 'block_12_project_BN[0][0]'] + + block_13_expand (Conv2D) (None, 14, 14, 576) 55296 ['block_12_add[0][0]'] + + block_13_expand_BN (BatchNormalization) (None, 14, 14, 576) 2304 ['block_13_expand[0][0]'] + + block_13_expand_relu (ReLU) (None, 14, 14, 576) 0 ['block_13_expand_BN[0][0]'] + + block_13_pad (ZeroPadding2D) (None, 15, 15, 576) 0 ['block_13_expand_relu[0][0]'] + + block_13_depthwise (DepthwiseConv2D) (None, 7, 7, 576) 5184 ['block_13_pad[0][0]'] + + block_13_depthwise_BN (BatchNormalization) (None, 7, 7, 576) 2304 ['block_13_depthwise[0][0]'] + + block_13_depthwise_relu (ReLU) (None, 7, 7, 576) 0 ['block_13_depthwise_BN[0][0]'] + + block_13_project (Conv2D) (None, 7, 7, 160) 92160 ['block_13_depthwise_relu[0][0]'] + + block_13_project_BN (BatchNormalization) (None, 7, 7, 160) 640 ['block_13_project[0][0]'] + + block_14_expand (Conv2D) (None, 7, 7, 960) 153600 ['block_13_project_BN[0][0]'] + + block_14_expand_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_14_expand[0][0]'] + + block_14_expand_relu (ReLU) (None, 7, 7, 960) 0 ['block_14_expand_BN[0][0]'] + + block_14_depthwise (DepthwiseConv2D) (None, 7, 7, 960) 8640 ['block_14_expand_relu[0][0]'] + + block_14_depthwise_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_14_depthwise[0][0]'] + + block_14_depthwise_relu (ReLU) (None, 7, 7, 960) 0 ['block_14_depthwise_BN[0][0]'] + + block_14_project (Conv2D) (None, 7, 7, 160) 153600 ['block_14_depthwise_relu[0][0]'] + + block_14_project_BN (BatchNormalization) (None, 7, 7, 160) 640 ['block_14_project[0][0]'] + + block_14_add (Add) (None, 7, 7, 160) 0 ['block_13_project_BN[0][0]', + 'block_14_project_BN[0][0]'] + + block_15_expand (Conv2D) (None, 7, 7, 960) 153600 ['block_14_add[0][0]'] + + block_15_expand_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_15_expand[0][0]'] + + block_15_expand_relu (ReLU) (None, 7, 7, 960) 0 ['block_15_expand_BN[0][0]'] + + block_15_depthwise (DepthwiseConv2D) (None, 7, 7, 960) 8640 ['block_15_expand_relu[0][0]'] + + block_15_depthwise_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_15_depthwise[0][0]'] + + block_15_depthwise_relu (ReLU) (None, 7, 7, 960) 0 ['block_15_depthwise_BN[0][0]'] + + block_15_project (Conv2D) (None, 7, 7, 160) 153600 ['block_15_depthwise_relu[0][0]'] + + block_15_project_BN (BatchNormalization) (None, 7, 7, 160) 640 ['block_15_project[0][0]'] + + block_15_add (Add) (None, 7, 7, 160) 0 ['block_14_add[0][0]', + 'block_15_project_BN[0][0]'] + + block_16_expand (Conv2D) (None, 7, 7, 960) 153600 ['block_15_add[0][0]'] + + block_16_expand_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_16_expand[0][0]'] + + block_16_expand_relu (ReLU) (None, 7, 7, 960) 0 ['block_16_expand_BN[0][0]'] + + block_16_depthwise (DepthwiseConv2D) (None, 7, 7, 960) 8640 ['block_16_expand_relu[0][0]'] + + block_16_depthwise_BN (BatchNormalization) (None, 7, 7, 960) 3840 ['block_16_depthwise[0][0]'] + + block_16_depthwise_relu (ReLU) (None, 7, 7, 960) 0 ['block_16_depthwise_BN[0][0]'] + + block_16_project (Conv2D) (None, 7, 7, 320) 307200 ['block_16_depthwise_relu[0][0]'] + + block_16_project_BN (BatchNormalization) (None, 7, 7, 320) 1280 ['block_16_project[0][0]'] + + Conv_1 (Conv2D) (None, 7, 7, 1280) 409600 ['block_16_project_BN[0][0]'] + + Conv_1_bn (BatchNormalization) (None, 7, 7, 1280) 5120 ['Conv_1[0][0]'] + + out_relu (ReLU) (None, 7, 7, 1280) 0 ['Conv_1_bn[0][0]'] + + global_average_pooling2d (GlobalAveragePooling2 (None, 1280) 0 ['out_relu[0][0]'] + D) + + dense (Dense) (None, 8631) 11056311 ['global_average_pooling2d[0][0]'] + +====================================================================================================================================================== +Total params: 13,314,295 +Trainable params: 13,280,183 +Non-trainable params: 34,112 +______________________________________________________________________________________________________________________________________________________ +Epoch 1/25 +Epoch 00001: val_accuracy improved from -inf to 0.70027, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3446s 311ms/step - loss: 2.9497 - accuracy: 0.4908 - top-5-accuracy: 0.6538 - top-10-accuracy: 0.7119 - top-100-accuracy: 0.8687 - val_loss: 1.4240 - val_accuracy: 0.7003 - val_top-5-accuracy: 0.8539 - val_top-10-accuracy: 0.8953 - val_top-100-accuracy: 0.9759 +Epoch 2/25 +Epoch 00002: val_accuracy improved from 0.70027 to 0.83601, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3451s 312ms/step - loss: 0.9672 - accuracy: 0.7959 - top-5-accuracy: 0.9071 - top-10-accuracy: 0.9348 - top-100-accuracy: 0.9855 - val_loss: 0.7466 - val_accuracy: 0.8360 - val_top-5-accuracy: 0.9333 - val_top-10-accuracy: 0.9547 - val_top-100-accuracy: 0.9909 +Epoch 3/25 +Epoch 00003: val_accuracy improved from 0.83601 to 0.87064, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3461s 313ms/step - loss: 0.6250 - accuracy: 0.8633 - top-5-accuracy: 0.9446 - top-10-accuracy: 0.9626 - top-100-accuracy: 0.9925 - val_loss: 0.5745 - val_accuracy: 0.8706 - val_top-5-accuracy: 0.9524 - val_top-10-accuracy: 0.9691 - val_top-100-accuracy: 0.9943 +Epoch 4/25 +Epoch 00004: val_accuracy improved from 0.87064 to 0.90236, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3451s 312ms/step - loss: 0.4612 - accuracy: 0.8969 - top-5-accuracy: 0.9619 - top-10-accuracy: 0.9749 - top-100-accuracy: 0.9952 - val_loss: 0.4232 - val_accuracy: 0.9024 - val_top-5-accuracy: 0.9674 - val_top-10-accuracy: 0.9791 - val_top-100-accuracy: 0.9964 +Epoch 5/25 +Epoch 00005: val_accuracy improved from 0.90236 to 0.92468, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3468s 314ms/step - loss: 0.3604 - accuracy: 0.9181 - top-5-accuracy: 0.9721 - top-10-accuracy: 0.9819 - top-100-accuracy: 0.9968 - val_loss: 0.3239 - val_accuracy: 0.9247 - val_top-5-accuracy: 0.9771 - val_top-10-accuracy: 0.9855 - val_top-100-accuracy: 0.9976 +Epoch 6/25 +Epoch 00006: val_accuracy improved from 0.92468 to 0.93362, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3455s 313ms/step - loss: 0.2913 - accuracy: 0.9328 - top-5-accuracy: 0.9787 - top-10-accuracy: 0.9866 - top-100-accuracy: 0.9978 - val_loss: 0.2783 - val_accuracy: 0.9336 - val_top-5-accuracy: 0.9816 - val_top-10-accuracy: 0.9886 - val_top-100-accuracy: 0.9984 +Epoch 7/25 +Epoch 00007: val_accuracy did not improve from 0.93362 11046/11046 [==============================] - 3436s 311ms/step - loss: 0.2407 - accuracy: 0.9436 - top-5-accuracy: 0.9835 - top-10-accuracy: 0.9898 - top-100-accuracy: 0.9984 - val_loss: 0.2714 - val_accuracy: 0.9319 - val_top-5-accuracy: 0.9826 - val_top-10-accuracy: 0.9900 - val_top-100-accuracy: 0.9986 +Epoch 8/25 +Epoch 00008: val_accuracy improved from 0.93362 to 0.95498, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3440s 311ms/step - loss: 0.2013 - accuracy: 0.9522 - top-5-accuracy: 0.9872 - top-10-accuracy: 0.9922 - top-100-accuracy: 0.9989 - val_loss: 0.1851 - val_accuracy: 0.9550 - val_top-5-accuracy: 0.9900 - val_top-10-accuracy: 0.9942 - val_top-100-accuracy: 0.9993 +Epoch 9/25 +Epoch 00009: val_accuracy did not improve from 0.95498 11046/11046 [==============================] - 3459s 313ms/step - loss: 0.1699 - accuracy: 0.9590 - top-5-accuracy: 0.9899 - top-10-accuracy: 0.9940 - top-100-accuracy: 0.9992 - val_loss: 0.1860 - val_accuracy: 0.9511 - val_top-5-accuracy: 0.9903 - val_top-10-accuracy: 0.9950 - val_top-100-accuracy: 0.9994 +Epoch 10/25 +Epoch 00010: val_accuracy improved from 0.95498 to 0.95772, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3447s 312ms/step - loss: 0.1451 - accuracy: 0.9644 - top-5-accuracy: 0.9920 - top-10-accuracy: 0.9954 - top-100-accuracy: 0.9994 - val_loss: 0.1597 - val_accuracy: 0.9577 - val_top-5-accuracy: 0.9926 - val_top-10-accuracy: 0.9961 - val_top-100-accuracy: 0.9995 +Epoch 11/25 +Epoch 00011: val_accuracy did not improve from 0.95772 11046/11046 [==============================] - 3459s 313ms/step - loss: 0.1248 - accuracy: 0.9689 - top-5-accuracy: 0.9936 - top-10-accuracy: 0.9964 - top-100-accuracy: 0.9996 - val_loss: 0.1626 - val_accuracy: 0.9551 - val_top-5-accuracy: 0.9927 - val_top-10-accuracy: 0.9966 - val_top-100-accuracy: 0.9997 +Epoch 12/25 +Epoch 00012: val_accuracy improved from 0.95772 to 0.97526, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3472s 314ms/step - loss: 0.1077 - accuracy: 0.9728 - top-5-accuracy: 0.9950 - top-10-accuracy: 0.9973 - top-100-accuracy: 0.9997 - val_loss: 0.0944 - val_accuracy: 0.9753 - val_top-5-accuracy: 0.9967 - val_top-10-accuracy: 0.9983 - val_top-100-accuracy: 0.9999 +Epoch 13/25 +Epoch 00013: val_accuracy did not improve from 0.97526 11046/11046 [==============================] - 3464s 314ms/step - loss: 0.0937 - accuracy: 0.9759 - top-5-accuracy: 0.9961 - top-10-accuracy: 0.9979 - top-100-accuracy: 0.9998 - val_loss: 0.0970 - val_accuracy: 0.9736 - val_top-5-accuracy: 0.9967 - val_top-10-accuracy: 0.9984 - val_top-100-accuracy: 0.9999 +Epoch 14/25 +Epoch 00014: val_accuracy improved from 0.97526 to 0.97551, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3473s 314ms/step - loss: 0.0820 - accuracy: 0.9786 - top-5-accuracy: 0.9969 - top-10-accuracy: 0.9984 - top-100-accuracy: 0.9999 - val_loss: 0.0881 - val_accuracy: 0.9755 - val_top-5-accuracy: 0.9971 - val_top-10-accuracy: 0.9987 - val_top-100-accuracy: 0.9999 +Epoch 15/25 +Epoch 00015: val_accuracy improved from 0.97551 to 0.97630, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3458s 313ms/step - loss: 0.0726 - accuracy: 0.9809 - top-5-accuracy: 0.9975 - top-10-accuracy: 0.9988 - top-100-accuracy: 0.9999 - val_loss: 0.0846 - val_accuracy: 0.9763 - val_top-5-accuracy: 0.9976 - val_top-10-accuracy: 0.9990 - val_top-100-accuracy: 1.0000 +Epoch 16/25 +Epoch 00016: val_accuracy improved from 0.97630 to 0.97727, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3463s 313ms/step - loss: 0.0643 - accuracy: 0.9829 - top-5-accuracy: 0.9981 - top-10-accuracy: 0.9991 - top-100-accuracy: 0.9999 - val_loss: 0.0778 - val_accuracy: 0.9773 - val_top-5-accuracy: 0.9981 - val_top-10-accuracy: 0.9993 - val_top-100-accuracy: 1.0000 +Epoch 17/25 +Epoch 00017: val_accuracy improved from 0.97727 to 0.97786, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3451s 312ms/step - loss: 0.0572 - accuracy: 0.9846 - top-5-accuracy: 0.9985 - top-10-accuracy: 0.9993 - top-100-accuracy: 1.0000 - val_loss: 0.0758 - val_accuracy: 0.9779 - val_top-5-accuracy: 0.9982 - val_top-10-accuracy: 0.9993 - val_top-100-accuracy: 1.0000 +Epoch 18/25 +Epoch 00018: val_accuracy improved from 0.97786 to 0.97878, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3426s 310ms/step - loss: 0.0517 - accuracy: 0.9860 - top-5-accuracy: 0.9988 - top-10-accuracy: 0.9995 - top-100-accuracy: 1.0000 - val_loss: 0.0705 - val_accuracy: 0.9788 - val_top-5-accuracy: 0.9986 - val_top-10-accuracy: 0.9995 - val_top-100-accuracy: 1.0000 +Epoch 19/25 +Epoch 00019: val_accuracy improved from 0.97878 to 0.97922, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3425s 310ms/step - loss: 0.0468 - accuracy: 0.9872 - top-5-accuracy: 0.9990 - top-10-accuracy: 0.9996 - top-100-accuracy: 1.0000 - val_loss: 0.0694 - val_accuracy: 0.9792 - val_top-5-accuracy: 0.9986 - val_top-10-accuracy: 0.9996 - val_top-100-accuracy: 1.0000 +Epoch 20/25 +Epoch 00020: val_accuracy improved from 0.97922 to 0.98256, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3418s 309ms/step - loss: 0.0424 - accuracy: 0.9882 - top-5-accuracy: 0.9992 - top-10-accuracy: 0.9997 - top-100-accuracy: 1.0000 - val_loss: 0.0584 - val_accuracy: 0.9826 - val_top-5-accuracy: 0.9991 - val_top-10-accuracy: 0.9997 - val_top-100-accuracy: 1.0000 +Epoch 21/25 +Epoch 00021: val_accuracy did not improve from 0.98256 11046/11046 [==============================] - 3425s 310ms/step - loss: 0.0391 - accuracy: 0.9891 - top-5-accuracy: 0.9993 - top-10-accuracy: 0.9998 - top-100-accuracy: 1.0000 - val_loss: 0.0739 - val_accuracy: 0.9775 - val_top-5-accuracy: 0.9984 - val_top-10-accuracy: 0.9995 - val_top-100-accuracy: 1.0000 +Epoch 22/25 +Epoch 00022: val_accuracy improved from 0.98256 to 0.98781, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3420s 309ms/step - loss: 0.0362 - accuracy: 0.9899 - top-5-accuracy: 0.9995 - top-10-accuracy: 0.9998 - top-100-accuracy: 1.0000 - val_loss: 0.0415 - val_accuracy: 0.9878 - val_top-5-accuracy: 0.9995 - val_top-10-accuracy: 0.9999 - val_top-100-accuracy: 1.0000 +Epoch 23/25 +Epoch 00023: val_accuracy did not improve from 0.98781 11046/11046 [==============================] - 3420s 310ms/step - loss: 0.0334 - accuracy: 0.9907 - top-5-accuracy: 0.9996 - top-10-accuracy: 0.9999 - top-100-accuracy: 1.0000 - val_loss: 0.0752 - val_accuracy: 0.9770 - val_top-5-accuracy: 0.9985 - val_top-10-accuracy: 0.9996 - val_top-100-accuracy: 1.0000 +Epoch 24/25 +Epoch 00024: val_accuracy improved from 0.98781 to 0.98899, saving model to ./tmp/checkpoint 11046/11046 [==============================] - 3436s 311ms/step - loss: 0.0311 - accuracy: 0.9912 - top-5-accuracy: 0.9996 - top-10-accuracy: 0.9999 - top-100-accuracy: 1.0000 - val_loss: 0.0375 - val_accuracy: 0.9890 - val_top-5-accuracy: 0.9996 - val_top-10-accuracy: 0.9999 - val_top-100-accuracy: 1.0000 +Epoch 25/25 +Epoch 00025: val_accuracy did not improve from 0.98899 11046/11046 [==============================] - 3424s 310ms/step - loss: 0.0293 - accuracy: 0.9918 - top-5-accuracy: 0.9997 - top-10-accuracy: 0.9999 - top-100-accuracy: 1.0000 - val_loss: 0.0413 - val_accuracy: 0.9876 - val_top-5-accuracy: 0.9996 - val_top-10-accuracy: 0.9999 - val_top-100-accuracy: 1.0000 614/614 [==============================] - 54s 70ms/step - loss: 0.0374 - accuracy: 0.9892 - top-5-accuracy: 0.9996 - top-10-accuracy: 0.9999 - top-100-accuracy: 1.0000 +Accuracy on the test set: 98.92%. +Top 5 Accuracy on the test set: 99.96%. +Top 10 Accuracy on the test set: 99.99%. +Top 100 Accuracy on the test set: 100.0%. diff --git a/saved_results/Models/MobileNet_V2/training_log.csv b/saved_results/Models/MobileNet_V2/training_log.csv new file mode 100644 index 0000000..538ef4c --- /dev/null +++ b/saved_results/Models/MobileNet_V2/training_log.csv @@ -0,0 +1,26 @@ +epoch,accuracy,loss,top-10-accuracy,top-100-accuracy,top-5-accuracy,val_accuracy,val_loss,val_top-10-accuracy,val_top-100-accuracy,val_top-5-accuracy +0,0.4907640516757965,2.949651002883911,0.7118712067604065,0.868656575679779,0.6537961363792419,0.7002686262130737,1.4239873886108398,0.8952919840812683,0.9758934378623962,0.853851854801178 +1,0.795885443687439,0.9672361016273499,0.9348357319831848,0.9854981303215027,0.9071050882339478,0.8360090255737305,0.7465912103652954,0.9546831846237183,0.9909353852272034,0.9332756400108337 +2,0.8633260726928711,0.6249759793281555,0.9625975489616394,0.9924740791320801,0.9446355700492859,0.8706443309783936,0.5745269060134888,0.9690758585929871,0.994270920753479,0.952448844909668 +3,0.8968734741210938,0.46120527386665344,0.9748672246932983,0.9952197670936584,0.9618654847145081,0.902364194393158,0.4231894016265869,0.9791271686553955,0.9963652491569519,0.9674080610275269 +4,0.9181494116783142,0.36037951707839966,0.9819280505180359,0.9967595338821411,0.9721487760543823,0.9246756434440613,0.32385993003845215,0.985480010509491,0.9976319670677185,0.9770964980125427 +5,0.9327888488769531,0.2913418114185333,0.9865629076957703,0.997750461101532,0.9787262082099915,0.9336193799972534,0.27826163172721863,0.9886055588722229,0.998383104801178,0.9815842509269714 +6,0.9436453580856323,0.24069969356060028,0.989750325679779,0.9983972907066345,0.9834964871406555,0.931856095790863,0.2713744342327118,0.9899677634239197,0.9985804557800293,0.9825645685195923 +7,0.9521682262420654,0.20128048956394196,0.9921678304672241,0.9988619685173035,0.9871729612350464,0.9549760222434998,0.18512850999832153,0.9941691160202026,0.9992679357528687,0.9899550676345825 +8,0.9589677453041077,0.1698894202709198,0.9939650893211365,0.9991915822029114,0.9898921251296997,0.9510611295700073,0.1860179901123047,0.9949711561203003,0.9993952512741089,0.9903051853179932 +9,0.9644138216972351,0.14514721930027008,0.9954121708869934,0.9994133114814758,0.9920172095298767,0.9577195644378662,0.1596861630678177,0.9961488246917725,0.9995161890983582,0.9926095008850098 +10,0.9689231514930725,0.12475422024726868,0.9964313507080078,0.9996000528335571,0.993649959564209,0.955058753490448,0.1626364290714264,0.9965816736221313,0.9996753334999084,0.9926795363426208 +11,0.9727602005004883,0.10766829550266266,0.9972864985466003,0.9997209906578064,0.9950493574142456,0.9752568602561951,0.09437419474124908,0.9983195066452026,0.9998599290847778,0.9966517090797424 +12,0.9758743643760681,0.09373524785041809,0.9979273080825806,0.9997881650924683,0.996117353439331,0.973614513874054,0.09697101265192032,0.9983958601951599,0.9999045133590698,0.9966962337493896 +13,0.9786292910575867,0.08203183114528656,0.9984199404716492,0.9998556971549988,0.996892511844635,0.9755051136016846,0.08805303275585175,0.9986759424209595,0.9999172687530518,0.9971482157707214 +14,0.9808819890022278,0.07264290004968643,0.9987650513648987,0.9999023675918579,0.9975138902664185,0.976300835609436,0.08455612510442734,0.998968780040741,0.9999745488166809,0.9976256489753723 +15,0.9828794002532959,0.06430379301309586,0.9990943074226379,0.9999317526817322,0.9980705380439758,0.977268397808075,0.07780636847019196,0.9992552399635315,0.9999809265136719,0.9981221556663513 +16,0.9845736622810364,0.05719618871808052,0.9993026256561279,0.9999561309814453,0.998477578163147,0.9778603911399841,0.0757608637213707,0.9992616176605225,0.9999809265136719,0.9982303380966187 +17,0.9859727025032043,0.051699280738830566,0.9994804859161377,0.9999752640724182,0.9987739324569702,0.9787770509719849,0.07049136608839035,0.9994907379150391,0.9999809265136719,0.9985740780830383 +18,0.9872153997421265,0.04683251306414604,0.9995855093002319,0.9999851584434509,0.9990158081054688,0.9792226552963257,0.06943082809448242,0.9995735287666321,0.9999872446060181,0.9986441135406494 +19,0.9882335662841797,0.04242420196533203,0.9997022151947021,0.9999908208847046,0.9992198348045349,0.9825581908226013,0.05836047977209091,0.9996626377105713,0.999993622303009,0.9990515112876892 +20,0.9891318082809448,0.039091356098651886,0.9997729659080505,0.9999939799308777,0.9993308782577515,0.9775166511535645,0.07386624068021774,0.9995289444923401,0.999993622303009,0.9984404444694519 +21,0.9898553490638733,0.03624232858419418,0.999825656414032,0.9999982118606567,0.999459981918335,0.9878098368644714,0.04147448390722275,0.9998790621757507,1.0,0.99949711561203 +22,0.9906644821166992,0.03344619646668434,0.999862790107727,0.9999974966049194,0.9995526671409607,0.9770392179489136,0.07516016811132431,0.9995862245559692,1.0,0.9984785914421082 +23,0.991235613822937,0.03114890120923519,0.9999006390571594,0.9999978542327881,0.9996435046195984,0.9889938235282898,0.03747271001338959,0.9998981356620789,1.0,0.9996180534362793 +24,0.9917523264884949,0.029260696843266487,0.9999108910560608,0.9999985694885254,0.9996809959411621,0.9876443147659302,0.041266944259405136,0.9999045133590698,1.0,0.9995671510696411