Project Description
We’ll examine an image classification dataset to build a bias-free/ corruption-free automatic system that reports & avoids faulty situations caused by human error. Examples of human error include misclassifying the correct type of boat. The type of boat that enters the port region is as follows:
Buoy
Cruise_ship
Ferry_boat
Freight_boar
Gondola
Inflatable_boat
Kayak
Paper_boat
Sailboat
I apply some Deep Learning techniques with Keras
to build an automatic reporting system that recognizes the boat. We compare a custome model to a transfer learning approach of any lightweight pre-trained model to compare their training and accuracy results.
Importing Libraries
Import the necessary packages and load the dataset
# Python built-in libraries
import os
from pathlib import Path
# Data pre-preprocessing and visualization
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.image as image
import seaborn as sns
# Sci-kit learn functions
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report
# Keras functions
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# For model training and compilation
from keras import layers, models
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, GlobalAveragePooling2D, Dense, Dropout, BatchNormalization
from keras.callbacks import ModelCheckpoint, EarlyStopping
from keras import optimizers
from keras import losses
from keras import metrics
from keras.metrics import Precision, Recall
from keras.models import save_model, load_model
# For MobileNetV2
from keras.applications import MobileNetV2
# suppress warnings output messages
import warnings
warnings.filterwarnings('ignore' )
2025-04-24 08:21:44.579011: I tensorflow/core/util/port.cc:153] oneDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`.
2025-04-24 08:21:44.592606: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.
2025-04-24 08:21:44.690236: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used.
2025-04-24 08:21:44.751919: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:467] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
E0000 00:00:1745500904.812251 6908 cuda_dnn.cc:8579] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered
E0000 00:00:1745500904.829982 6908 cuda_blas.cc:1407] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered
W0000 00:00:1745500904.964755 6908 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.
W0000 00:00:1745500904.964778 6908 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.
W0000 00:00:1745500904.964779 6908 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.
W0000 00:00:1745500904.964780 6908 computation_placer.cc:177] computation placer already registered. Please check linkage and avoid linking the same target more than once.
2025-04-24 08:21:44.979275: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: AVX2 AVX_VNNI FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
image_dir = Path('datasets/Automating_Port_Operations' )
PosixPath('datasets/Automating_Port_Operations')
image_files = list (image_dir.glob(r' ** / * . jpg' ))
In order to collect the labels
from the name of the classes, Pathlib’s parts
attribute can directly extract the second-to-last part of the path, which corresponds to the class label.
labels = [x.parts[- 2 ] for x in image_files]
image_df = pd.DataFrame({'Filepath' : image_files, 'Label' : labels}).astype(str ).sample(frac= 1.0 , random_state= 43 ).reset_index(drop= True )
image_df
0
datasets/Automating_Port_Operations/sailboat/2...
sailboat
1
datasets/Automating_Port_Operations/kayak/119.jpg
kayak
2
datasets/Automating_Port_Operations/kayak/51.jpg
kayak
3
datasets/Automating_Port_Operations/kayak/147.jpg
kayak
4
datasets/Automating_Port_Operations/sailboat/9...
sailboat
...
...
...
1157
datasets/Automating_Port_Operations/sailboat/2...
sailboat
1158
datasets/Automating_Port_Operations/sailboat/3...
sailboat
1159
datasets/Automating_Port_Operations/sailboat/2...
sailboat
1160
datasets/Automating_Port_Operations/sailboat/4...
sailboat
1161
datasets/Automating_Port_Operations/sailboat/8...
sailboat
1162 rows × 2 columns
class_names = image_df['Label' ].value_counts()
print (f' The number of classes found: { len (class_names)} ' )
print (' \n ' )
print (class_names)
The number of classes found: 9
Label
sailboat 389
kayak 203
gondola 193
cruise_ship 191
ferry_boat 63
buoy 53
paper_boat 31
freight_boat 23
inflatable_boat 16
Name: count, dtype: int64
train_df, test_df = train_test_split(image_df, train_size= 0.8 , shuffle= True , random_state= 43 )
Load the Image Data
Let’s determine the image dimensions for the building the dataset and CNN architecture.
Our data is of shape 224×224
and the channel is 3(RGB)
, so for example if we are to create the first layer of a CNN, then (224,224,3)
input shape. Hence, we used the input_shape to make sure that this layer accepts the data.
train_generator = ImageDataGenerator(
rescale= 1. / 255 ,
validation_split= 0.2
)
test_generator = ImageDataGenerator(rescale= 1. / 255 )
batch_size = 32
img_width, img_height = (224 , 224 )
train_images = train_generator.flow_from_dataframe(
dataframe= train_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= True ,
seed= 42 ,
subset= 'training'
)
val_images = train_generator.flow_from_dataframe(
dataframe= train_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= True ,
seed= 42 ,
subset= 'validation'
)
test_images = test_generator.flow_from_dataframe(
dataframe= test_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= False
)
Found 744 validated image filenames belonging to 9 classes.
Found 185 validated image filenames belonging to 9 classes.
Found 233 validated image filenames belonging to 9 classes.
Visualize the Data
Here are the first 25
images from the training dataset.
1028
datasets/Automating_Port_Operations/buoy/5.jpg
buoy
1026
datasets/Automating_Port_Operations/cruise_shi...
cruise_ship
578
datasets/Automating_Port_Operations/sailboat/1...
sailboat
319
datasets/Automating_Port_Operations/sailboat/3...
sailboat
525
datasets/Automating_Port_Operations/sailboat/2...
sailboat
108
datasets/Automating_Port_Operations/sailboat/1...
sailboat
214
datasets/Automating_Port_Operations/cruise_shi...
cruise_ship
299
datasets/Automating_Port_Operations/kayak/12.jpg
kayak
658
datasets/Automating_Port_Operations/sailboat/3...
sailboat
1039
datasets/Automating_Port_Operations/sailboat/3...
sailboat
431
datasets/Automating_Port_Operations/paper_boat...
paper_boat
1009
datasets/Automating_Port_Operations/sailboat/1...
sailboat
529
datasets/Automating_Port_Operations/sailboat/1...
sailboat
220
datasets/Automating_Port_Operations/buoy/39.jpg
buoy
305
datasets/Automating_Port_Operations/sailboat/1...
sailboat
1102
datasets/Automating_Port_Operations/paper_boat...
paper_boat
950
datasets/Automating_Port_Operations/sailboat/1...
sailboat
404
datasets/Automating_Port_Operations/cruise_shi...
cruise_ship
793
datasets/Automating_Port_Operations/sailboat/5...
sailboat
861
datasets/Automating_Port_Operations/sailboat/2...
sailboat
119
datasets/Automating_Port_Operations/sailboat/3...
sailboat
353
datasets/Automating_Port_Operations/cruise_shi...
cruise_ship
163
datasets/Automating_Port_Operations/ferry_boat...
ferry_boat
497
datasets/Automating_Port_Operations/sailboat/1...
sailboat
703
datasets/Automating_Port_Operations/kayak/139.jpg
kayak
# Get the image filepaths and labels from the training data
train_image_filepaths = train_df['Filepath' ].values
train_labels = train_df['Label' ].values
def display_examples(num_images, image_filepaths, labels):
"""
Display the specified number of images from the images array with its corresponding labels
"""
figsize = (20 , 20 )
fig = plt.figure(figsize= figsize)
fig.suptitle("Some examples of images of the dataset" , fontsize= 24 )
for i in range (num_images):
plt.subplot(5 ,5 ,i+ 1 )
plt.xticks([])
plt.yticks([])
plt.grid(False )
# Load and display the image
img = image.imread(image_filepaths[i])
plt.title(labels[i])
plt.imshow(img)
#plt.xlabel([labels[i]])
plt.show()
display_examples(25 , train_image_filepaths, train_labels)
Section 1: Building the CNN in order to classify boats
Build the Model
channel = 3
num_classes = len (class_names)
# Adding the hidden layers and the output layer to our model
model = Sequential([
layers.Conv2D(32 , (3 , 3 ), activation= 'relu' , input_shape= (img_width, img_height, channel)),
layers.MaxPooling2D((2 , 2 )),
layers.Conv2D(32 , (3 , 3 ), activation= 'relu' ),
layers.MaxPooling2D((2 , 2 )),
layers.GlobalAveragePooling2D(),
layers.Flatten(),
layers.Dense(128 , activation= 'relu' ),
layers.Dense(128 , activation= 'relu' ),
layers.Dense(num_classes, activation= 'softmax' )
])
# Display the summary of the model architecture and the number of parameters
model.summary()
2025-04-24 08:21:52.886925: E external/local_xla/xla/stream_executor/cuda/cuda_platform.cc:51] failed call to cuInit: INTERNAL: CUDA error: Failed call to cuInit: UNKNOWN ERROR (303)
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ conv2d (Conv2D ) │ (None , 222 , 222 , 32 ) │ 896 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d (MaxPooling2D ) │ (None , 111 , 111 , 32 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv2d_1 (Conv2D ) │ (None , 109 , 109 , 32 ) │ 9,248 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ max_pooling2d_1 (MaxPooling2D ) │ (None , 54 , 54 , 32 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ global_average_pooling2d │ (None , 32 ) │ 0 │
│ (GlobalAveragePooling2D ) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ flatten (Flatten ) │ (None , 32 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense (Dense ) │ (None , 128 ) │ 4,224 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_1 (Dense ) │ (None , 128 ) │ 16,512 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_2 (Dense ) │ (None , 9 ) │ 1,161 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 32,041 (125.16 KB)
Trainable params: 32,041 (125.16 KB)
Non-trainable params: 0 (0.00 B)
Compile the Model
model.compile (
optimizer = 'adam' ,
loss = 'categorical_crossentropy' ,
metrics = ['accuracy' ,
Precision(),
Recall(),
]
)
Train the Model
Train the model with 20
epochs and we’ll plot training loss and accuracy against epochs.
# Define checkpoints
checkpoint = ModelCheckpoint('best_model.weights.h5' ,
save_best_only= True )
epochs= 20
history = model.fit(
train_images,
validation_data= val_images,
epochs= epochs,
callbacks= [checkpoint]
)
Epoch 1/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 34s 2s/step - accuracy: 0.0938 - loss: 2.1988 - precision: 0.0000e+00 - recall: 0.0000e+00 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 184ms/step - accuracy: 0.1094 - loss: 2.1951 - precision: 0.0000e+00 - recall: 0.0000e+00 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 212ms/step - accuracy: 0.1042 - loss: 2.1925 - precision: 0.0000e+00 - recall: 0.0000e+00 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 216ms/step - accuracy: 0.0957 - loss: 2.1898 - precision: 0.0000e+00 - recall: 0.0000e+00 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 218ms/step - accuracy: 0.0903 - loss: 2.1874 - precision: 0.0000e+00 - recall: 0.0000e+00 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 220ms/step - accuracy: 0.0944 - loss: 2.1848 - precision: 0.0000e+00 - recall: 0.0000e+00 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 221ms/step - accuracy: 0.1000 - loss: 2.1823 - precision: 0.0000e+00 - recall: 0.0000e+00 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 220ms/step - accuracy: 0.1080 - loss: 2.1791 - precision: 0.0000e+00 - recall: 0.0000e+00 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 219ms/step - accuracy: 0.1153 - loss: 2.1758 - precision: 0.0000e+00 - recall: 0.0000e+0010/24 ━━━━━━━━━━━━━━━━━━━━ 3s 220ms/step - accuracy: 0.1231 - loss: 2.1720 - precision: 0.0000e+00 - recall: 0.0000e+0011/24 ━━━━━━━━━━━━━━━━━━━━ 2s 220ms/step - accuracy: 0.1318 - loss: 2.1674 - precision: 0.0000e+00 - recall: 0.0000e+0012/24 ━━━━━━━━━━━━━━━━━━━━ 2s 221ms/step - accuracy: 0.1397 - loss: 2.1624 - precision: 0.0000e+00 - recall: 0.0000e+0013/24 ━━━━━━━━━━━━━━━━━━━━ 2s 222ms/step - accuracy: 0.1467 - loss: 2.1571 - precision: 0.0000e+00 - recall: 0.0000e+0014/24 ━━━━━━━━━━━━━━━━━━━━ 2s 222ms/step - accuracy: 0.1527 - loss: 2.1524 - precision: 0.0000e+00 - recall: 0.0000e+0015/24 ━━━━━━━━━━━━━━━━━━━━ 1s 222ms/step - accuracy: 0.1578 - loss: 2.1476 - precision: 0.0000e+00 - recall: 0.0000e+0016/24 ━━━━━━━━━━━━━━━━━━━━ 1s 222ms/step - accuracy: 0.1626 - loss: 2.1425 - precision: 0.0000e+00 - recall: 0.0000e+0017/24 ━━━━━━━━━━━━━━━━━━━━ 1s 222ms/step - accuracy: 0.1671 - loss: 2.1370 - precision: 0.0000e+00 - recall: 0.0000e+0018/24 ━━━━━━━━━━━━━━━━━━━━ 1s 212ms/step - accuracy: 0.1709 - loss: 2.1326 - precision: 0.0000e+00 - recall: 0.0000e+0019/24 ━━━━━━━━━━━━━━━━━━━━ 1s 213ms/step - accuracy: 0.1744 - loss: 2.1280 - precision: 0.0000e+00 - recall: 0.0000e+0020/24 ━━━━━━━━━━━━━━━━━━━━ 0s 213ms/step - accuracy: 0.1779 - loss: 2.1227 - precision: 0.0000e+00 - recall: 0.0000e+0021/24 ━━━━━━━━━━━━━━━━━━━━ 0s 214ms/step - accuracy: 0.1815 - loss: 2.1171 - precision: 0.0000e+00 - recall: 0.0000e+0022/24 ━━━━━━━━━━━━━━━━━━━━ 0s 215ms/step - accuracy: 0.1850 - loss: 2.1113 - precision: 0.0000e+00 - recall: 0.0000e+0023/24 ━━━━━━━━━━━━━━━━━━━━ 0s 217ms/step - accuracy: 0.1884 - loss: 2.1058 - precision: 0.0000e+00 - recall: 0.0000e+0024/24 ━━━━━━━━━━━━━━━━━━━━ 0s 217ms/step - accuracy: 0.1917 - loss: 2.1002 - precision: 0.0000e+00 - recall: 0.0000e+00
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 8s 291ms/step - accuracy: 0.1948 - loss: 2.0950 - precision: 0.0000e+00 - recall: 0.0000e+00 - val_accuracy: 0.3892 - val_loss: 1.8238 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
Epoch 2/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 267ms/step - accuracy: 0.3125 - loss: 1.8744 - precision: 0.0000e+00 - recall: 0.0000e+00 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 202ms/step - accuracy: 0.3281 - loss: 1.7925 - precision: 0.0000e+00 - recall: 0.0000e+00 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 208ms/step - accuracy: 0.3333 - loss: 1.7928 - precision: 0.0000e+00 - recall: 0.0000e+00 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 209ms/step - accuracy: 0.3340 - loss: 1.7981 - precision: 0.0000e+00 - recall: 0.0000e+00 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 208ms/step - accuracy: 0.3359 - loss: 1.7993 - precision: 0.0000e+00 - recall: 0.0000e+00 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 207ms/step - accuracy: 0.3329 - loss: 1.8050 - precision: 0.1667 - recall: 8.6806e-04 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 208ms/step - accuracy: 0.3319 - loss: 1.8046 - precision: 0.2857 - recall: 0.0014 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 206ms/step - accuracy: 0.3309 - loss: 1.8051 - precision: 0.3750 - recall: 0.0017 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 207ms/step - accuracy: 0.3300 - loss: 1.8053 - precision: 0.4444 - recall: 0.001910/24 ━━━━━━━━━━━━━━━━━━━━ 2s 206ms/step - accuracy: 0.3289 - loss: 1.8072 - precision: 0.5000 - recall: 0.002011/24 ━━━━━━━━━━━━━━━━━━━━ 2s 205ms/step - accuracy: 0.3287 - loss: 1.8076 - precision: 0.5455 - recall: 0.002112/24 ━━━━━━━━━━━━━━━━━━━━ 2s 206ms/step - accuracy: 0.3280 - loss: 1.8077 - precision: 0.5833 - recall: 0.002113/24 ━━━━━━━━━━━━━━━━━━━━ 2s 205ms/step - accuracy: 0.3274 - loss: 1.8071 - precision: 0.6154 - recall: 0.002214/24 ━━━━━━━━━━━━━━━━━━━━ 2s 205ms/step - accuracy: 0.3271 - loss: 1.8072 - precision: 0.6429 - recall: 0.002215/24 ━━━━━━━━━━━━━━━━━━━━ 1s 205ms/step - accuracy: 0.3274 - loss: 1.8067 - precision: 0.6667 - recall: 0.002216/24 ━━━━━━━━━━━━━━━━━━━━ 1s 205ms/step - accuracy: 0.3273 - loss: 1.8066 - precision: 0.6875 - recall: 0.002118/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.3272 - loss: 1.8068 - precision: 0.7222 - recall: 0.002119/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3273 - loss: 1.8065 - precision: 0.7368 - recall: 0.002120/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3276 - loss: 1.8061 - precision: 0.7500 - recall: 0.002121/24 ━━━━━━━━━━━━━━━━━━━━ 0s 256ms/step - accuracy: 0.3278 - loss: 1.8056 - precision: 0.7619 - recall: 0.002022/24 ━━━━━━━━━━━━━━━━━━━━ 0s 343ms/step - accuracy: 0.3277 - loss: 1.8054 - precision: 0.7727 - recall: 0.002023/24 ━━━━━━━━━━━━━━━━━━━━ 0s 336ms/step - accuracy: 0.3276 - loss: 1.8050 - precision: 0.7826 - recall: 0.002024/24 ━━━━━━━━━━━━━━━━━━━━ 0s 329ms/step - accuracy: 0.3276 - loss: 1.8047 - precision: 0.7917 - recall: 0.0020
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 9s 362ms/step - accuracy: 0.3277 - loss: 1.8044 - precision: 0.8000 - recall: 0.0019 - val_accuracy: 0.3892 - val_loss: 1.7837 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
Epoch 3/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 286ms/step - accuracy: 0.2812 - loss: 1.9176 - precision: 0.0000e+00 - recall: 0.0000e+00 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 196ms/step - accuracy: 0.2969 - loss: 1.8772 - precision: 0.0000e+00 - recall: 0.0000e+00 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 211ms/step - accuracy: 0.2951 - loss: 1.8651 - precision: 0.0000e+00 - recall: 0.0000e+00 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 204ms/step - accuracy: 0.3053 - loss: 1.8440 - precision: 0.0000e+00 - recall: 0.0000e+00 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 175ms/step - accuracy: 0.3182 - loss: 1.8121 - precision: 0.3333 - recall: 0.0042 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 178ms/step - accuracy: 0.3228 - loss: 1.7986 - precision: 0.4286 - recall: 0.0057 8/24 ━━━━━━━━━━━━━━━━━━━━ 2s 185ms/step - accuracy: 0.3244 - loss: 1.7949 - precision: 0.4750 - recall: 0.0072 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 187ms/step - accuracy: 0.3254 - loss: 1.7951 - precision: 0.5175 - recall: 0.008910/24 ━━━━━━━━━━━━━━━━━━━━ 2s 188ms/step - accuracy: 0.3260 - loss: 1.7974 - precision: 0.5357 - recall: 0.010411/24 ━━━━━━━━━━━━━━━━━━━━ 2s 189ms/step - accuracy: 0.3271 - loss: 1.7994 - precision: 0.5531 - recall: 0.011712/24 ━━━━━━━━━━━━━━━━━━━━ 2s 190ms/step - accuracy: 0.3283 - loss: 1.8013 - precision: 0.5676 - recall: 0.012513/24 ━━━━━━━━━━━━━━━━━━━━ 2s 193ms/step - accuracy: 0.3290 - loss: 1.8045 - precision: 0.5831 - recall: 0.013514/24 ━━━━━━━━━━━━━━━━━━━━ 1s 195ms/step - accuracy: 0.3294 - loss: 1.8069 - precision: 0.5964 - recall: 0.014315/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.3295 - loss: 1.8084 - precision: 0.6043 - recall: 0.014816/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.3297 - loss: 1.8093 - precision: 0.6112 - recall: 0.015117/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3299 - loss: 1.8096 - precision: 0.6172 - recall: 0.015418/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3296 - loss: 1.8097 - precision: 0.6226 - recall: 0.015519/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3294 - loss: 1.8098 - precision: 0.6275 - recall: 0.015620/24 ━━━━━━━━━━━━━━━━━━━━ 0s 197ms/step - accuracy: 0.3292 - loss: 1.8099 - precision: 0.6318 - recall: 0.015621/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3289 - loss: 1.8101 - precision: 0.6357 - recall: 0.015622/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3287 - loss: 1.8102 - precision: 0.6393 - recall: 0.015623/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3284 - loss: 1.8102 - precision: 0.6426 - recall: 0.015524/24 ━━━━━━━━━━━━━━━━━━━━ 0s 197ms/step - accuracy: 0.3282 - loss: 1.8098 - precision: 0.6455 - recall: 0.015424/24 ━━━━━━━━━━━━━━━━━━━━ 6s 229ms/step - accuracy: 0.3280 - loss: 1.8095 - precision: 0.6483 - recall: 0.0153 - val_accuracy: 0.3946 - val_loss: 1.7973 - val_precision: 0.0000e+00 - val_recall: 0.0000e+00
Epoch 4/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 285ms/step - accuracy: 0.4375 - loss: 1.6553 - precision: 0.0000e+00 - recall: 0.0000e+00 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 222ms/step - accuracy: 0.4062 - loss: 1.7465 - precision: 0.0000e+00 - recall: 0.0000e+00 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 210ms/step - accuracy: 0.3889 - loss: 1.7742 - precision: 0.0000e+00 - recall: 0.0000e+00 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 203ms/step - accuracy: 0.3796 - loss: 1.7955 - precision: 0.0000e+00 - recall: 0.0000e+00 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.3724 - loss: 1.8086 - precision: 0.0000e+00 - recall: 0.0000e+00 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.3702 - loss: 1.8149 - precision: 0.0000e+00 - recall: 0.0000e+00 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 200ms/step - accuracy: 0.3696 - loss: 1.8158 - precision: 0.0714 - recall: 6.3776e-04 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.3688 - loss: 1.8155 - precision: 0.1250 - recall: 0.0010 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 198ms/step - accuracy: 0.3664 - loss: 1.8152 - precision: 0.1667 - recall: 0.001310/24 ━━━━━━━━━━━━━━━━━━━━ 2s 198ms/step - accuracy: 0.3629 - loss: 1.8143 - precision: 0.2000 - recall: 0.001511/24 ━━━━━━━━━━━━━━━━━━━━ 2s 197ms/step - accuracy: 0.3599 - loss: 1.8126 - precision: 0.2364 - recall: 0.002112/24 ━━━━━━━━━━━━━━━━━━━━ 2s 198ms/step - accuracy: 0.3577 - loss: 1.8106 - precision: 0.2667 - recall: 0.002613/24 ━━━━━━━━━━━━━━━━━━━━ 2s 198ms/step - accuracy: 0.3548 - loss: 1.8090 - precision: 0.2923 - recall: 0.003014/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3525 - loss: 1.8068 - precision: 0.3143 - recall: 0.003215/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.3507 - loss: 1.8052 - precision: 0.3333 - recall: 0.003416/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3494 - loss: 1.8040 - precision: 0.3500 - recall: 0.003617/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3486 - loss: 1.8029 - precision: 0.3647 - recall: 0.003718/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3479 - loss: 1.8014 - precision: 0.3778 - recall: 0.003819/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3472 - loss: 1.7997 - precision: 0.3895 - recall: 0.003820/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.3467 - loss: 1.7977 - precision: 0.4000 - recall: 0.003922/24 ━━━━━━━━━━━━━━━━━━━━ 0s 191ms/step - accuracy: 0.3458 - loss: 1.7942 - precision: 0.4169 - recall: 0.004023/24 ━━━━━━━━━━━━━━━━━━━━ 0s 191ms/step - accuracy: 0.3456 - loss: 1.7926 - precision: 0.4241 - recall: 0.004324/24 ━━━━━━━━━━━━━━━━━━━━ 0s 191ms/step - accuracy: 0.3452 - loss: 1.7913 - precision: 0.4303 - recall: 0.0045
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 5s 225ms/step - accuracy: 0.3449 - loss: 1.7900 - precision: 0.4359 - recall: 0.0048 - val_accuracy: 0.3892 - val_loss: 1.7679 - val_precision: 0.7368 - val_recall: 0.0757
Epoch 5/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 277ms/step - accuracy: 0.2812 - loss: 1.8867 - precision: 1.0000 - recall: 0.0312 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 205ms/step - accuracy: 0.2891 - loss: 1.8538 - precision: 1.0000 - recall: 0.0469 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 201ms/step - accuracy: 0.2969 - loss: 1.8315 - precision: 1.0000 - recall: 0.0486 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 203ms/step - accuracy: 0.3008 - loss: 1.8195 - precision: 0.9286 - recall: 0.0462 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.3069 - loss: 1.8041 - precision: 0.8679 - recall: 0.0432 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.3130 - loss: 1.7980 - precision: 0.8274 - recall: 0.0404 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 200ms/step - accuracy: 0.3200 - loss: 1.7936 - precision: 0.7985 - recall: 0.0378 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 198ms/step - accuracy: 0.3220 - loss: 1.7928 - precision: 0.7768 - recall: 0.0355 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 197ms/step - accuracy: 0.3244 - loss: 1.7906 - precision: 0.7599 - recall: 0.033510/24 ━━━━━━━━━━━━━━━━━━━━ 2s 196ms/step - accuracy: 0.3273 - loss: 1.7887 - precision: 0.7464 - recall: 0.031711/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.3298 - loss: 1.7873 - precision: 0.7354 - recall: 0.030112/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.3320 - loss: 1.7861 - precision: 0.7262 - recall: 0.028713/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.3335 - loss: 1.7842 - precision: 0.7184 - recall: 0.027414/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.3344 - loss: 1.7822 - precision: 0.7117 - recall: 0.026215/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.3347 - loss: 1.7811 - precision: 0.7060 - recall: 0.025216/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.3358 - loss: 1.7793 - precision: 0.7009 - recall: 0.024217/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.3364 - loss: 1.7782 - precision: 0.6964 - recall: 0.023318/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.3368 - loss: 1.7771 - precision: 0.6886 - recall: 0.022519/24 ━━━━━━━━━━━━━━━━━━━━ 0s 194ms/step - accuracy: 0.3372 - loss: 1.7760 - precision: 0.6816 - recall: 0.021820/24 ━━━━━━━━━━━━━━━━━━━━ 0s 194ms/step - accuracy: 0.3379 - loss: 1.7743 - precision: 0.6753 - recall: 0.021121/24 ━━━━━━━━━━━━━━━━━━━━ 0s 194ms/step - accuracy: 0.3386 - loss: 1.7728 - precision: 0.6696 - recall: 0.020423/24 ━━━━━━━━━━━━━━━━━━━━ 0s 187ms/step - accuracy: 0.3397 - loss: 1.7705 - precision: 0.6599 - recall: 0.019524/24 ━━━━━━━━━━━━━━━━━━━━ 0s 186ms/step - accuracy: 0.3403 - loss: 1.7692 - precision: 0.6562 - recall: 0.0191
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 5s 219ms/step - accuracy: 0.3407 - loss: 1.7679 - precision: 0.6528 - recall: 0.0188 - val_accuracy: 0.3838 - val_loss: 1.7429 - val_precision: 0.6429 - val_recall: 0.0486
Epoch 6/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 270ms/step - accuracy: 0.1875 - loss: 1.9309 - precision: 1.0000 - recall: 0.0312 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 198ms/step - accuracy: 0.2500 - loss: 1.8417 - precision: 1.0000 - recall: 0.0312 4/24 ━━━━━━━━━━━━━━━━━━━━ 2s 149ms/step - accuracy: 0.2973 - loss: 1.7650 - precision: 1.0000 - recall: 0.0298 5/24 ━━━━━━━━━━━━━━━━━━━━ 2s 157ms/step - accuracy: 0.3143 - loss: 1.7447 - precision: 1.0000 - recall: 0.0326 6/24 ━━━━━━━━━━━━━━━━━━━━ 2s 163ms/step - accuracy: 0.3244 - loss: 1.7332 - precision: 0.9815 - recall: 0.0351 7/24 ━━━━━━━━━━━━━━━━━━━━ 2s 169ms/step - accuracy: 0.3288 - loss: 1.7271 - precision: 0.9698 - recall: 0.0366 8/24 ━━━━━━━━━━━━━━━━━━━━ 2s 174ms/step - accuracy: 0.3324 - loss: 1.7208 - precision: 0.9544 - recall: 0.0379 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 177ms/step - accuracy: 0.3350 - loss: 1.7144 - precision: 0.9317 - recall: 0.038710/24 ━━━━━━━━━━━━━━━━━━━━ 2s 179ms/step - accuracy: 0.3360 - loss: 1.7098 - precision: 0.9052 - recall: 0.038911/24 ━━━━━━━━━━━━━━━━━━━━ 2s 181ms/step - accuracy: 0.3379 - loss: 1.7055 - precision: 0.8849 - recall: 0.039512/24 ━━━━━━━━━━━━━━━━━━━━ 2s 182ms/step - accuracy: 0.3398 - loss: 1.7020 - precision: 0.8711 - recall: 0.040413/24 ━━━━━━━━━━━━━━━━━━━━ 2s 183ms/step - accuracy: 0.3417 - loss: 1.6995 - precision: 0.8570 - recall: 0.041614/24 ━━━━━━━━━━━━━━━━━━━━ 1s 184ms/step - accuracy: 0.3428 - loss: 1.6989 - precision: 0.8404 - recall: 0.042915/24 ━━━━━━━━━━━━━━━━━━━━ 1s 185ms/step - accuracy: 0.3432 - loss: 1.6987 - precision: 0.8244 - recall: 0.044016/24 ━━━━━━━━━━━━━━━━━━━━ 1s 186ms/step - accuracy: 0.3439 - loss: 1.6983 - precision: 0.8101 - recall: 0.044817/24 ━━━━━━━━━━━━━━━━━━━━ 1s 187ms/step - accuracy: 0.3448 - loss: 1.6975 - precision: 0.7975 - recall: 0.045318/24 ━━━━━━━━━━━━━━━━━━━━ 1s 188ms/step - accuracy: 0.3458 - loss: 1.6962 - precision: 0.7865 - recall: 0.045819/24 ━━━━━━━━━━━━━━━━━━━━ 0s 189ms/step - accuracy: 0.3468 - loss: 1.6944 - precision: 0.7769 - recall: 0.046320/24 ━━━━━━━━━━━━━━━━━━━━ 0s 189ms/step - accuracy: 0.3478 - loss: 1.6934 - precision: 0.7683 - recall: 0.046621/24 ━━━━━━━━━━━━━━━━━━━━ 0s 189ms/step - accuracy: 0.3488 - loss: 1.6927 - precision: 0.7604 - recall: 0.046722/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.3496 - loss: 1.6923 - precision: 0.7533 - recall: 0.046723/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.3502 - loss: 1.6923 - precision: 0.7468 - recall: 0.046824/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.3508 - loss: 1.6929 - precision: 0.7408 - recall: 0.046824/24 ━━━━━━━━━━━━━━━━━━━━ 5s 224ms/step - accuracy: 0.3514 - loss: 1.6934 - precision: 0.7353 - recall: 0.0469 - val_accuracy: 0.3730 - val_loss: 1.7534 - val_precision: 0.1667 - val_recall: 0.0108
Epoch 7/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 279ms/step - accuracy: 0.2812 - loss: 1.7579 - precision: 1.0000 - recall: 0.0625 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 194ms/step - accuracy: 0.2734 - loss: 1.7602 - precision: 1.0000 - recall: 0.0547 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 201ms/step - accuracy: 0.2830 - loss: 1.7468 - precision: 1.0000 - recall: 0.0469 4/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.3001 - loss: 1.7310 - precision: 1.0000 - recall: 0.0430 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.3101 - loss: 1.7218 - precision: 1.0000 - recall: 0.0394 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 201ms/step - accuracy: 0.3192 - loss: 1.7150 - precision: 0.9667 - recall: 0.0363 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.3265 - loss: 1.7086 - precision: 0.9429 - recall: 0.0337 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 200ms/step - accuracy: 0.3336 - loss: 1.7029 - precision: 0.8964 - recall: 0.0314 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 201ms/step - accuracy: 0.3370 - loss: 1.7030 - precision: 0.8567 - recall: 0.030610/24 ━━━━━━━━━━━━━━━━━━━━ 2s 199ms/step - accuracy: 0.3392 - loss: 1.7050 - precision: 0.8248 - recall: 0.029711/24 ━━━━━━━━━━━━━━━━━━━━ 2s 199ms/step - accuracy: 0.3422 - loss: 1.7073 - precision: 0.7953 - recall: 0.028813/24 ━━━━━━━━━━━━━━━━━━━━ 2s 188ms/step - accuracy: 0.3473 - loss: 1.7106 - precision: 0.7496 - recall: 0.027714/24 ━━━━━━━━━━━━━━━━━━━━ 1s 189ms/step - accuracy: 0.3486 - loss: 1.7134 - precision: 0.7317 - recall: 0.027415/24 ━━━━━━━━━━━━━━━━━━━━ 1s 190ms/step - accuracy: 0.3493 - loss: 1.7154 - precision: 0.7163 - recall: 0.027316/24 ━━━━━━━━━━━━━━━━━━━━ 1s 190ms/step - accuracy: 0.3500 - loss: 1.7167 - precision: 0.7050 - recall: 0.027517/24 ━━━━━━━━━━━━━━━━━━━━ 1s 190ms/step - accuracy: 0.3512 - loss: 1.7172 - precision: 0.6981 - recall: 0.028218/24 ━━━━━━━━━━━━━━━━━━━━ 1s 191ms/step - accuracy: 0.3524 - loss: 1.7172 - precision: 0.6924 - recall: 0.028819/24 ━━━━━━━━━━━━━━━━━━━━ 0s 192ms/step - accuracy: 0.3536 - loss: 1.7167 - precision: 0.6888 - recall: 0.029520/24 ━━━━━━━━━━━━━━━━━━━━ 0s 192ms/step - accuracy: 0.3552 - loss: 1.7158 - precision: 0.6854 - recall: 0.030221/24 ━━━━━━━━━━━━━━━━━━━━ 0s 192ms/step - accuracy: 0.3568 - loss: 1.7148 - precision: 0.6817 - recall: 0.030822/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3583 - loss: 1.7134 - precision: 0.6773 - recall: 0.031523/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3597 - loss: 1.7126 - precision: 0.6725 - recall: 0.032224/24 ━━━━━━━━━━━━━━━━━━━━ 0s 192ms/step - accuracy: 0.3607 - loss: 1.7117 - precision: 0.6692 - recall: 0.033024/24 ━━━━━━━━━━━━━━━━━━━━ 5s 227ms/step - accuracy: 0.3617 - loss: 1.7109 - precision: 0.6662 - recall: 0.0337 - val_accuracy: 0.3459 - val_loss: 1.7719 - val_precision: 0.5111 - val_recall: 0.1243
Epoch 8/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 7s 338ms/step - accuracy: 0.4062 - loss: 1.6701 - precision: 0.6000 - recall: 0.0938 2/24 ━━━━━━━━━━━━━━━━━━━━ 5s 250ms/step - accuracy: 0.3906 - loss: 1.6675 - precision: 0.5500 - recall: 0.1094 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 230ms/step - accuracy: 0.3819 - loss: 1.6715 - precision: 0.5246 - recall: 0.1042 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 230ms/step - accuracy: 0.3802 - loss: 1.6781 - precision: 0.5234 - recall: 0.1035 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 226ms/step - accuracy: 0.3754 - loss: 1.6803 - precision: 0.5153 - recall: 0.1003 6/24 ━━━━━━━━━━━━━━━━━━━━ 14s 808ms/step - accuracy: 0.3771 - loss: 1.6751 - precision: 0.5176 - recall: 0.0992 7/24 ━━━━━━━━━━━━━━━━━━━━ 12s 712ms/step - accuracy: 0.3787 - loss: 1.6683 - precision: 0.5189 - recall: 0.0978 8/24 ━━━━━━━━━━━━━━━━━━━━ 10s 641ms/step - accuracy: 0.3812 - loss: 1.6639 - precision: 0.5225 - recall: 0.0968 9/24 ━━━━━━━━━━━━━━━━━━━━ 8s 589ms/step - accuracy: 0.3828 - loss: 1.6623 - precision: 0.5269 - recall: 0.0965 10/24 ━━━━━━━━━━━━━━━━━━━━ 7s 547ms/step - accuracy: 0.3851 - loss: 1.6611 - precision: 0.5311 - recall: 0.095911/24 ━━━━━━━━━━━━━━━━━━━━ 6s 515ms/step - accuracy: 0.3855 - loss: 1.6614 - precision: 0.5360 - recall: 0.095212/24 ━━━━━━━━━━━━━━━━━━━━ 5s 488ms/step - accuracy: 0.3857 - loss: 1.6611 - precision: 0.5401 - recall: 0.094013/24 ━━━━━━━━━━━━━━━━━━━━ 5s 464ms/step - accuracy: 0.3856 - loss: 1.6608 - precision: 0.5444 - recall: 0.093014/24 ━━━━━━━━━━━━━━━━━━━━ 4s 445ms/step - accuracy: 0.3857 - loss: 1.6613 - precision: 0.5467 - recall: 0.091815/24 ━━━━━━━━━━━━━━━━━━━━ 3s 431ms/step - accuracy: 0.3855 - loss: 1.6616 - precision: 0.5480 - recall: 0.090416/24 ━━━━━━━━━━━━━━━━━━━━ 3s 416ms/step - accuracy: 0.3855 - loss: 1.6620 - precision: 0.5499 - recall: 0.089317/24 ━━━━━━━━━━━━━━━━━━━━ 2s 403ms/step - accuracy: 0.3859 - loss: 1.6620 - precision: 0.5523 - recall: 0.088218/24 ━━━━━━━━━━━━━━━━━━━━ 2s 392ms/step - accuracy: 0.3864 - loss: 1.6621 - precision: 0.5545 - recall: 0.087419/24 ━━━━━━━━━━━━━━━━━━━━ 1s 383ms/step - accuracy: 0.3867 - loss: 1.6625 - precision: 0.5562 - recall: 0.086620/24 ━━━━━━━━━━━━━━━━━━━━ 1s 372ms/step - accuracy: 0.3870 - loss: 1.6629 - precision: 0.5576 - recall: 0.086021/24 ━━━━━━━━━━━━━━━━━━━━ 1s 364ms/step - accuracy: 0.3872 - loss: 1.6631 - precision: 0.5597 - recall: 0.085523/24 ━━━━━━━━━━━━━━━━━━━━ 0s 342ms/step - accuracy: 0.3873 - loss: 1.6639 - precision: 0.5637 - recall: 0.084724/24 ━━━━━━━━━━━━━━━━━━━━ 0s 335ms/step - accuracy: 0.3874 - loss: 1.6644 - precision: 0.5655 - recall: 0.0843
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 9s 371ms/step - accuracy: 0.3874 - loss: 1.6650 - precision: 0.5673 - recall: 0.0840 - val_accuracy: 0.4054 - val_loss: 1.7359 - val_precision: 0.5200 - val_recall: 0.0703
Epoch 9/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 8s 351ms/step - accuracy: 0.3438 - loss: 1.6865 - precision: 0.7500 - recall: 0.0938 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 215ms/step - accuracy: 0.3438 - loss: 1.6877 - precision: 0.7250 - recall: 0.1016 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 208ms/step - accuracy: 0.3438 - loss: 1.6758 - precision: 0.7333 - recall: 0.1094 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 169ms/step - accuracy: 0.3529 - loss: 1.6491 - precision: 0.7453 - recall: 0.1142 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 180ms/step - accuracy: 0.3546 - loss: 1.6454 - precision: 0.7499 - recall: 0.1120 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 183ms/step - accuracy: 0.3525 - loss: 1.6474 - precision: 0.7417 - recall: 0.1089 8/24 ━━━━━━━━━━━━━━━━━━━━ 2s 187ms/step - accuracy: 0.3531 - loss: 1.6464 - precision: 0.7285 - recall: 0.1066 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 188ms/step - accuracy: 0.3530 - loss: 1.6463 - precision: 0.7226 - recall: 0.106110/24 ━━━━━━━━━━━━━━━━━━━━ 2s 191ms/step - accuracy: 0.3536 - loss: 1.6474 - precision: 0.7184 - recall: 0.106311/24 ━━━━━━━━━━━━━━━━━━━━ 2s 190ms/step - accuracy: 0.3552 - loss: 1.6464 - precision: 0.7147 - recall: 0.107712/24 ━━━━━━━━━━━━━━━━━━━━ 2s 191ms/step - accuracy: 0.3564 - loss: 1.6470 - precision: 0.7120 - recall: 0.109213/24 ━━━━━━━━━━━━━━━━━━━━ 2s 191ms/step - accuracy: 0.3573 - loss: 1.6480 - precision: 0.7070 - recall: 0.109814/24 ━━━━━━━━━━━━━━━━━━━━ 1s 190ms/step - accuracy: 0.3585 - loss: 1.6488 - precision: 0.7017 - recall: 0.110415/24 ━━━━━━━━━━━━━━━━━━━━ 1s 192ms/step - accuracy: 0.3596 - loss: 1.6498 - precision: 0.6962 - recall: 0.111016/24 ━━━━━━━━━━━━━━━━━━━━ 1s 191ms/step - accuracy: 0.3606 - loss: 1.6512 - precision: 0.6894 - recall: 0.111817/24 ━━━━━━━━━━━━━━━━━━━━ 1s 192ms/step - accuracy: 0.3613 - loss: 1.6524 - precision: 0.6824 - recall: 0.112618/24 ━━━━━━━━━━━━━━━━━━━━ 1s 191ms/step - accuracy: 0.3616 - loss: 1.6552 - precision: 0.6742 - recall: 0.113319/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3618 - loss: 1.6575 - precision: 0.6666 - recall: 0.113820/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3623 - loss: 1.6595 - precision: 0.6597 - recall: 0.114121/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3631 - loss: 1.6606 - precision: 0.6537 - recall: 0.114322/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3639 - loss: 1.6615 - precision: 0.6484 - recall: 0.114523/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3648 - loss: 1.6621 - precision: 0.6444 - recall: 0.114824/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.3657 - loss: 1.6629 - precision: 0.6405 - recall: 0.115024/24 ━━━━━━━━━━━━━━━━━━━━ 5s 223ms/step - accuracy: 0.3666 - loss: 1.6637 - precision: 0.6370 - recall: 0.1153 - val_accuracy: 0.3243 - val_loss: 1.8331 - val_precision: 0.3333 - val_recall: 0.0432
Epoch 10/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 290ms/step - accuracy: 0.4688 - loss: 1.5499 - precision: 0.7500 - recall: 0.0938 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 191ms/step - accuracy: 0.4375 - loss: 1.5826 - precision: 0.6528 - recall: 0.0859 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 192ms/step - accuracy: 0.4201 - loss: 1.6032 - precision: 0.6296 - recall: 0.0816 4/24 ━━━━━━━━━━━━━━━━━━━━ 3s 190ms/step - accuracy: 0.4186 - loss: 1.6086 - precision: 0.6261 - recall: 0.0768 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 190ms/step - accuracy: 0.4211 - loss: 1.6077 - precision: 0.6151 - recall: 0.0715 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 194ms/step - accuracy: 0.4230 - loss: 1.6038 - precision: 0.6237 - recall: 0.0700 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.4219 - loss: 1.6059 - precision: 0.6255 - recall: 0.0689 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.4199 - loss: 1.6081 - precision: 0.6339 - recall: 0.0691 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 199ms/step - accuracy: 0.4192 - loss: 1.6109 - precision: 0.6375 - recall: 0.069110/24 ━━━━━━━━━━━━━━━━━━━━ 2s 200ms/step - accuracy: 0.4182 - loss: 1.6129 - precision: 0.6366 - recall: 0.069111/24 ━━━━━━━━━━━━━━━━━━━━ 2s 199ms/step - accuracy: 0.4166 - loss: 1.6144 - precision: 0.6356 - recall: 0.069312/24 ━━━━━━━━━━━━━━━━━━━━ 2s 198ms/step - accuracy: 0.4142 - loss: 1.6190 - precision: 0.6323 - recall: 0.069613/24 ━━━━━━━━━━━━━━━━━━━━ 2s 197ms/step - accuracy: 0.4118 - loss: 1.6229 - precision: 0.6270 - recall: 0.069914/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.4099 - loss: 1.6254 - precision: 0.6225 - recall: 0.070515/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.4090 - loss: 1.6265 - precision: 0.6195 - recall: 0.071516/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.4086 - loss: 1.6275 - precision: 0.6165 - recall: 0.072417/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.4082 - loss: 1.6283 - precision: 0.6125 - recall: 0.073118/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.4075 - loss: 1.6294 - precision: 0.6090 - recall: 0.073920/24 ━━━━━━━━━━━━━━━━━━━━ 0s 189ms/step - accuracy: 0.4064 - loss: 1.6315 - precision: 0.6025 - recall: 0.075221/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.4061 - loss: 1.6327 - precision: 0.6006 - recall: 0.075922/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.4060 - loss: 1.6340 - precision: 0.5989 - recall: 0.076623/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.4058 - loss: 1.6354 - precision: 0.5975 - recall: 0.077224/24 ━━━━━━━━━━━━━━━━━━━━ 0s 190ms/step - accuracy: 0.4056 - loss: 1.6364 - precision: 0.5964 - recall: 0.077824/24 ━━━━━━━━━━━━━━━━━━━━ 5s 223ms/step - accuracy: 0.4054 - loss: 1.6374 - precision: 0.5954 - recall: 0.0783 - val_accuracy: 0.3351 - val_loss: 1.7881 - val_precision: 0.3750 - val_recall: 0.0486
Epoch 11/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 2s 93ms/step - accuracy: 0.5000 - loss: 1.6504 - precision: 0.6667 - recall: 0.2500 2/24 ━━━━━━━━━━━━━━━━━━━━ 5s 236ms/step - accuracy: 0.4000 - loss: 1.7469 - precision: 0.6333 - recall: 0.1625 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 214ms/step - accuracy: 0.3731 - loss: 1.7390 - precision: 0.5889 - recall: 0.1222 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 208ms/step - accuracy: 0.3712 - loss: 1.7252 - precision: 0.5806 - recall: 0.1037 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 205ms/step - accuracy: 0.3749 - loss: 1.7067 - precision: 0.5756 - recall: 0.0903 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 204ms/step - accuracy: 0.3769 - loss: 1.6951 - precision: 0.5796 - recall: 0.0812 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 204ms/step - accuracy: 0.3816 - loss: 1.6837 - precision: 0.5877 - recall: 0.0746 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.3851 - loss: 1.6727 - precision: 0.6008 - recall: 0.0701 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 200ms/step - accuracy: 0.3878 - loss: 1.6632 - precision: 0.6110 - recall: 0.066110/24 ━━━━━━━━━━━━━━━━━━━━ 2s 202ms/step - accuracy: 0.3895 - loss: 1.6560 - precision: 0.6183 - recall: 0.063911/24 ━━━━━━━━━━━━━━━━━━━━ 2s 200ms/step - accuracy: 0.3921 - loss: 1.6484 - precision: 0.6275 - recall: 0.063112/24 ━━━━━━━━━━━━━━━━━━━━ 2s 200ms/step - accuracy: 0.3939 - loss: 1.6425 - precision: 0.6308 - recall: 0.062513/24 ━━━━━━━━━━━━━━━━━━━━ 2s 199ms/step - accuracy: 0.3950 - loss: 1.6386 - precision: 0.6343 - recall: 0.062614/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3956 - loss: 1.6363 - precision: 0.6366 - recall: 0.063515/24 ━━━━━━━━━━━━━━━━━━━━ 1s 199ms/step - accuracy: 0.3963 - loss: 1.6344 - precision: 0.6368 - recall: 0.065216/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.3964 - loss: 1.6338 - precision: 0.6347 - recall: 0.066817/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.3963 - loss: 1.6340 - precision: 0.6323 - recall: 0.068618/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.3960 - loss: 1.6346 - precision: 0.6290 - recall: 0.070319/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3953 - loss: 1.6350 - precision: 0.6265 - recall: 0.071820/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3952 - loss: 1.6358 - precision: 0.6240 - recall: 0.073321/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3950 - loss: 1.6371 - precision: 0.6217 - recall: 0.074722/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.3949 - loss: 1.6379 - precision: 0.6193 - recall: 0.076023/24 ━━━━━━━━━━━━━━━━━━━━ 0s 195ms/step - accuracy: 0.3944 - loss: 1.6392 - precision: 0.6166 - recall: 0.077024/24 ━━━━━━━━━━━━━━━━━━━━ 0s 195ms/step - accuracy: 0.3938 - loss: 1.6406 - precision: 0.6145 - recall: 0.0779
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 5s 230ms/step - accuracy: 0.3933 - loss: 1.6418 - precision: 0.6125 - recall: 0.0788 - val_accuracy: 0.4000 - val_loss: 1.6950 - val_precision: 0.6250 - val_recall: 0.0541
Epoch 12/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 286ms/step - accuracy: 0.5312 - loss: 1.6065 - precision: 1.0000 - recall: 0.0625 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 191ms/step - accuracy: 0.5156 - loss: 1.6083 - precision: 1.0000 - recall: 0.0469 3/24 ━━━━━━━━━━━━━━━━━━━━ 3s 186ms/step - accuracy: 0.5000 - loss: 1.6329 - precision: 0.8333 - recall: 0.0382 4/24 ━━━━━━━━━━━━━━━━━━━━ 3s 185ms/step - accuracy: 0.4844 - loss: 1.6432 - precision: 0.8036 - recall: 0.0384 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 191ms/step - accuracy: 0.4737 - loss: 1.6536 - precision: 0.7762 - recall: 0.0382 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 192ms/step - accuracy: 0.4651 - loss: 1.6577 - precision: 0.7468 - recall: 0.0371 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 192ms/step - accuracy: 0.4580 - loss: 1.6581 - precision: 0.7354 - recall: 0.0369 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 193ms/step - accuracy: 0.4520 - loss: 1.6583 - precision: 0.7351 - recall: 0.0376 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 193ms/step - accuracy: 0.4465 - loss: 1.6571 - precision: 0.7337 - recall: 0.038510/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.4422 - loss: 1.6556 - precision: 0.7299 - recall: 0.039611/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.4387 - loss: 1.6543 - precision: 0.7217 - recall: 0.040212/24 ━━━━━━━━━━━━━━━━━━━━ 2s 196ms/step - accuracy: 0.4355 - loss: 1.6523 - precision: 0.7153 - recall: 0.041113/24 ━━━━━━━━━━━━━━━━━━━━ 2s 196ms/step - accuracy: 0.4331 - loss: 1.6498 - precision: 0.7095 - recall: 0.042214/24 ━━━━━━━━━━━━━━━━━━━━ 1s 197ms/step - accuracy: 0.4309 - loss: 1.6481 - precision: 0.7064 - recall: 0.044015/24 ━━━━━━━━━━━━━━━━━━━━ 1s 198ms/step - accuracy: 0.4285 - loss: 1.6476 - precision: 0.6981 - recall: 0.045517/24 ━━━━━━━━━━━━━━━━━━━━ 1s 189ms/step - accuracy: 0.4246 - loss: 1.6465 - precision: 0.6853 - recall: 0.048518/24 ━━━━━━━━━━━━━━━━━━━━ 1s 190ms/step - accuracy: 0.4232 - loss: 1.6453 - precision: 0.6786 - recall: 0.050319/24 ━━━━━━━━━━━━━━━━━━━━ 0s 191ms/step - accuracy: 0.4219 - loss: 1.6445 - precision: 0.6720 - recall: 0.051920/24 ━━━━━━━━━━━━━━━━━━━━ 0s 192ms/step - accuracy: 0.4208 - loss: 1.6441 - precision: 0.6668 - recall: 0.053721/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.4197 - loss: 1.6441 - precision: 0.6610 - recall: 0.055422/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.4187 - loss: 1.6440 - precision: 0.6558 - recall: 0.057323/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.4175 - loss: 1.6439 - precision: 0.6506 - recall: 0.058924/24 ━━━━━━━━━━━━━━━━━━━━ 0s 193ms/step - accuracy: 0.4165 - loss: 1.6442 - precision: 0.6457 - recall: 0.060224/24 ━━━━━━━━━━━━━━━━━━━━ 5s 224ms/step - accuracy: 0.4155 - loss: 1.6446 - precision: 0.6411 - recall: 0.0614 - val_accuracy: 0.3784 - val_loss: 1.7170 - val_precision: 0.4815 - val_recall: 0.0703
Epoch 13/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 280ms/step - accuracy: 0.5000 - loss: 1.5144 - precision: 0.8000 - recall: 0.1250 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 190ms/step - accuracy: 0.4531 - loss: 1.5807 - precision: 0.7571 - recall: 0.1016 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 192ms/step - accuracy: 0.4479 - loss: 1.5857 - precision: 0.7429 - recall: 0.0851 4/24 ━━━━━━━━━━━━━━━━━━━━ 3s 191ms/step - accuracy: 0.4375 - loss: 1.5920 - precision: 0.7446 - recall: 0.0755 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 204ms/step - accuracy: 0.4300 - loss: 1.5935 - precision: 0.7496 - recall: 0.0729 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 202ms/step - accuracy: 0.4226 - loss: 1.5963 - precision: 0.7357 - recall: 0.0694 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.4190 - loss: 1.5961 - precision: 0.7259 - recall: 0.0659 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 199ms/step - accuracy: 0.4169 - loss: 1.5980 - precision: 0.7147 - recall: 0.0645 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 200ms/step - accuracy: 0.4157 - loss: 1.5995 - precision: 0.7064 - recall: 0.063510/24 ━━━━━━━━━━━━━━━━━━━━ 2s 202ms/step - accuracy: 0.4129 - loss: 1.6026 - precision: 0.6997 - recall: 0.062211/24 ━━━━━━━━━━━━━━━━━━━━ 2s 203ms/step - accuracy: 0.4115 - loss: 1.6047 - precision: 0.6967 - recall: 0.061212/24 ━━━━━━━━━━━━━━━━━━━━ 2s 203ms/step - accuracy: 0.4109 - loss: 1.6069 - precision: 0.6934 - recall: 0.060613/24 ━━━━━━━━━━━━━━━━━━━━ 2s 202ms/step - accuracy: 0.4105 - loss: 1.6082 - precision: 0.6921 - recall: 0.060214/24 ━━━━━━━━━━━━━━━━━━━━ 2s 204ms/step - accuracy: 0.4100 - loss: 1.6087 - precision: 0.6922 - recall: 0.059915/24 ━━━━━━━━━━━━━━━━━━━━ 1s 204ms/step - accuracy: 0.4099 - loss: 1.6096 - precision: 0.6937 - recall: 0.060116/24 ━━━━━━━━━━━━━━━━━━━━ 1s 204ms/step - accuracy: 0.4096 - loss: 1.6099 - precision: 0.6946 - recall: 0.060517/24 ━━━━━━━━━━━━━━━━━━━━ 1s 204ms/step - accuracy: 0.4093 - loss: 1.6102 - precision: 0.6959 - recall: 0.061018/24 ━━━━━━━━━━━━━━━━━━━━ 2s 392ms/step - accuracy: 0.4093 - loss: 1.6104 - precision: 0.6971 - recall: 0.061819/24 ━━━━━━━━━━━━━━━━━━━━ 1s 382ms/step - accuracy: 0.4098 - loss: 1.6104 - precision: 0.6983 - recall: 0.062820/24 ━━━━━━━━━━━━━━━━━━━━ 1s 374ms/step - accuracy: 0.4102 - loss: 1.6104 - precision: 0.6995 - recall: 0.064122/24 ━━━━━━━━━━━━━━━━━━━━ 0s 352ms/step - accuracy: 0.4108 - loss: 1.6102 - precision: 0.7011 - recall: 0.066923/24 ━━━━━━━━━━━━━━━━━━━━ 0s 348ms/step - accuracy: 0.4109 - loss: 1.6104 - precision: 0.7005 - recall: 0.068424/24 ━━━━━━━━━━━━━━━━━━━━ 0s 344ms/step - accuracy: 0.4107 - loss: 1.6107 - precision: 0.6980 - recall: 0.069924/24 ━━━━━━━━━━━━━━━━━━━━ 9s 378ms/step - accuracy: 0.4106 - loss: 1.6110 - precision: 0.6956 - recall: 0.0713 - val_accuracy: 0.3838 - val_loss: 1.7631 - val_precision: 0.5789 - val_recall: 0.2378
Epoch 14/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 6s 277ms/step - accuracy: 0.3750 - loss: 1.5465 - precision: 0.7273 - recall: 0.2500 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 211ms/step - accuracy: 0.4062 - loss: 1.5341 - precision: 0.6761 - recall: 0.2422 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 217ms/step - accuracy: 0.4201 - loss: 1.5289 - precision: 0.6664 - recall: 0.2378 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 213ms/step - accuracy: 0.4186 - loss: 1.5283 - precision: 0.6609 - recall: 0.2350 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 219ms/step - accuracy: 0.4174 - loss: 1.5325 - precision: 0.6608 - recall: 0.2293 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 218ms/step - accuracy: 0.4147 - loss: 1.5379 - precision: 0.6578 - recall: 0.2223 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 216ms/step - accuracy: 0.4147 - loss: 1.5395 - precision: 0.6531 - recall: 0.2161 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 216ms/step - accuracy: 0.4127 - loss: 1.5434 - precision: 0.6487 - recall: 0.2096 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 215ms/step - accuracy: 0.4097 - loss: 1.5510 - precision: 0.6457 - recall: 0.204010/24 ━━━━━━━━━━━━━━━━━━━━ 2s 213ms/step - accuracy: 0.4071 - loss: 1.5569 - precision: 0.6444 - recall: 0.199211/24 ━━━━━━━━━━━━━━━━━━━━ 2s 211ms/step - accuracy: 0.4050 - loss: 1.5631 - precision: 0.6435 - recall: 0.194612/24 ━━━━━━━━━━━━━━━━━━━━ 2s 212ms/step - accuracy: 0.4036 - loss: 1.5681 - precision: 0.6423 - recall: 0.190513/24 ━━━━━━━━━━━━━━━━━━━━ 2s 210ms/step - accuracy: 0.4027 - loss: 1.5723 - precision: 0.6408 - recall: 0.186614/24 ━━━━━━━━━━━━━━━━━━━━ 2s 209ms/step - accuracy: 0.4018 - loss: 1.5757 - precision: 0.6398 - recall: 0.183115/24 ━━━━━━━━━━━━━━━━━━━━ 1s 209ms/step - accuracy: 0.4014 - loss: 1.5778 - precision: 0.6394 - recall: 0.180116/24 ━━━━━━━━━━━━━━━━━━━━ 1s 209ms/step - accuracy: 0.4011 - loss: 1.5791 - precision: 0.6394 - recall: 0.177017/24 ━━━━━━━━━━━━━━━━━━━━ 1s 211ms/step - accuracy: 0.4012 - loss: 1.5801 - precision: 0.6394 - recall: 0.174318/24 ━━━━━━━━━━━━━━━━━━━━ 1s 212ms/step - accuracy: 0.4013 - loss: 1.5811 - precision: 0.6393 - recall: 0.171919/24 ━━━━━━━━━━━━━━━━━━━━ 1s 213ms/step - accuracy: 0.4010 - loss: 1.5822 - precision: 0.6392 - recall: 0.169520/24 ━━━━━━━━━━━━━━━━━━━━ 0s 214ms/step - accuracy: 0.4005 - loss: 1.5838 - precision: 0.6385 - recall: 0.167321/24 ━━━━━━━━━━━━━━━━━━━━ 0s 215ms/step - accuracy: 0.4006 - loss: 1.5847 - precision: 0.6383 - recall: 0.165422/24 ━━━━━━━━━━━━━━━━━━━━ 0s 215ms/step - accuracy: 0.4007 - loss: 1.5856 - precision: 0.6380 - recall: 0.163623/24 ━━━━━━━━━━━━━━━━━━━━ 0s 214ms/step - accuracy: 0.4006 - loss: 1.5866 - precision: 0.6376 - recall: 0.1620
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 6s 241ms/step - accuracy: 0.4007 - loss: 1.5882 - precision: 0.6368 - recall: 0.1594 - val_accuracy: 0.4216 - val_loss: 1.6771 - val_precision: 0.6290 - val_recall: 0.2108
Epoch 15/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 7s 325ms/step - accuracy: 0.4062 - loss: 1.4933 - precision: 0.7000 - recall: 0.2188 2/24 ━━━━━━━━━━━━━━━━━━━━ 5s 234ms/step - accuracy: 0.3750 - loss: 1.6112 - precision: 0.6227 - recall: 0.2031 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 227ms/step - accuracy: 0.3854 - loss: 1.6194 - precision: 0.6056 - recall: 0.2049 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 218ms/step - accuracy: 0.3887 - loss: 1.6325 - precision: 0.5987 - recall: 0.2044 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 211ms/step - accuracy: 0.3959 - loss: 1.6308 - precision: 0.5932 - recall: 0.2035 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 213ms/step - accuracy: 0.3994 - loss: 1.6314 - precision: 0.5889 - recall: 0.2026 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 187ms/step - accuracy: 0.4009 - loss: 1.6323 - precision: 0.5834 - recall: 0.2008 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 191ms/step - accuracy: 0.4025 - loss: 1.6292 - precision: 0.5803 - recall: 0.1989 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - accuracy: 0.4049 - loss: 1.6250 - precision: 0.5781 - recall: 0.198210/24 ━━━━━━━━━━━━━━━━━━━━ 2s 193ms/step - accuracy: 0.4077 - loss: 1.6201 - precision: 0.5791 - recall: 0.198711/24 ━━━━━━━━━━━━━━━━━━━━ 2s 196ms/step - accuracy: 0.4089 - loss: 1.6168 - precision: 0.5798 - recall: 0.198412/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.4086 - loss: 1.6157 - precision: 0.5797 - recall: 0.197313/24 ━━━━━━━━━━━━━━━━━━━━ 2s 195ms/step - accuracy: 0.4084 - loss: 1.6156 - precision: 0.5798 - recall: 0.196114/24 ━━━━━━━━━━━━━━━━━━━━ 1s 194ms/step - accuracy: 0.4075 - loss: 1.6157 - precision: 0.5806 - recall: 0.194715/24 ━━━━━━━━━━━━━━━━━━━━ 1s 195ms/step - accuracy: 0.4077 - loss: 1.6147 - precision: 0.5825 - recall: 0.193616/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.4079 - loss: 1.6132 - precision: 0.5845 - recall: 0.192117/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.4079 - loss: 1.6119 - precision: 0.5867 - recall: 0.190718/24 ━━━━━━━━━━━━━━━━━━━━ 1s 196ms/step - accuracy: 0.4078 - loss: 1.6111 - precision: 0.5888 - recall: 0.188919/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4078 - loss: 1.6101 - precision: 0.5907 - recall: 0.187320/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4081 - loss: 1.6093 - precision: 0.5926 - recall: 0.185721/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4085 - loss: 1.6088 - precision: 0.5935 - recall: 0.184122/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4090 - loss: 1.6083 - precision: 0.5941 - recall: 0.182423/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4094 - loss: 1.6078 - precision: 0.5948 - recall: 0.180824/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4099 - loss: 1.6074 - precision: 0.5954 - recall: 0.179224/24 ━━━━━━━━━━━━━━━━━━━━ 6s 227ms/step - accuracy: 0.4103 - loss: 1.6071 - precision: 0.5960 - recall: 0.1777 - val_accuracy: 0.4000 - val_loss: 1.7387 - val_precision: 0.4242 - val_recall: 0.0757
Epoch 16/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 7s 305ms/step - accuracy: 0.3125 - loss: 1.7572 - precision: 0.6000 - recall: 0.0938 2/24 ━━━━━━━━━━━━━━━━━━━━ 4s 195ms/step - accuracy: 0.3750 - loss: 1.6721 - precision: 0.6750 - recall: 0.0938 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 192ms/step - accuracy: 0.3993 - loss: 1.6273 - precision: 0.7000 - recall: 0.0938 5/24 ━━━━━━━━━━━━━━━━━━━━ 3s 162ms/step - accuracy: 0.4046 - loss: 1.5914 - precision: 0.7200 - recall: 0.0956 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 172ms/step - accuracy: 0.4086 - loss: 1.5832 - precision: 0.7250 - recall: 0.1005 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 177ms/step - accuracy: 0.4088 - loss: 1.5754 - precision: 0.7235 - recall: 0.1040 8/24 ━━━━━━━━━━━━━━━━━━━━ 2s 180ms/step - accuracy: 0.4116 - loss: 1.5669 - precision: 0.7260 - recall: 0.1066 9/24 ━━━━━━━━━━━━━━━━━━━━ 2s 184ms/step - accuracy: 0.4138 - loss: 1.5618 - precision: 0.7280 - recall: 0.108310/24 ━━━━━━━━━━━━━━━━━━━━ 2s 185ms/step - accuracy: 0.4184 - loss: 1.5544 - precision: 0.7307 - recall: 0.109911/24 ━━━━━━━━━━━━━━━━━━━━ 2s 187ms/step - accuracy: 0.4230 - loss: 1.5471 - precision: 0.7347 - recall: 0.113212/24 ━━━━━━━━━━━━━━━━━━━━ 2s 189ms/step - accuracy: 0.4271 - loss: 1.5404 - precision: 0.7388 - recall: 0.117213/24 ━━━━━━━━━━━━━━━━━━━━ 2s 190ms/step - accuracy: 0.4310 - loss: 1.5348 - precision: 0.7408 - recall: 0.121014/24 ━━━━━━━━━━━━━━━━━━━━ 1s 191ms/step - accuracy: 0.4329 - loss: 1.5323 - precision: 0.7391 - recall: 0.123415/24 ━━━━━━━━━━━━━━━━━━━━ 1s 192ms/step - accuracy: 0.4340 - loss: 1.5316 - precision: 0.7358 - recall: 0.125616/24 ━━━━━━━━━━━━━━━━━━━━ 1s 192ms/step - accuracy: 0.4347 - loss: 1.5320 - precision: 0.7320 - recall: 0.128117/24 ━━━━━━━━━━━━━━━━━━━━ 1s 193ms/step - accuracy: 0.4347 - loss: 1.5332 - precision: 0.7277 - recall: 0.130418/24 ━━━━━━━━━━━━━━━━━━━━ 1s 193ms/step - accuracy: 0.4345 - loss: 1.5355 - precision: 0.7223 - recall: 0.132419/24 ━━━━━━━━━━━━━━━━━━━━ 0s 196ms/step - accuracy: 0.4344 - loss: 1.5377 - precision: 0.7174 - recall: 0.134420/24 ━━━━━━━━━━━━━━━━━━━━ 0s 197ms/step - accuracy: 0.4342 - loss: 1.5394 - precision: 0.7133 - recall: 0.136121/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.4339 - loss: 1.5415 - precision: 0.7092 - recall: 0.137422/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.4335 - loss: 1.5437 - precision: 0.7053 - recall: 0.138423/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.4332 - loss: 1.5456 - precision: 0.7018 - recall: 0.139224/24 ━━━━━━━━━━━━━━━━━━━━ 0s 198ms/step - accuracy: 0.4331 - loss: 1.5473 - precision: 0.6988 - recall: 0.139924/24 ━━━━━━━━━━━━━━━━━━━━ 6s 232ms/step - accuracy: 0.4329 - loss: 1.5488 - precision: 0.6961 - recall: 0.1405 - val_accuracy: 0.3568 - val_loss: 1.7556 - val_precision: 0.3750 - val_recall: 0.0486
Epoch 17/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 8s 372ms/step - accuracy: 0.3750 - loss: 1.8425 - precision: 0.6000 - recall: 0.0938 2/24 ━━━━━━━━━━━━━━━━━━━━ 6s 292ms/step - accuracy: 0.3594 - loss: 1.7887 - precision: 0.6125 - recall: 0.0859 3/24 ━━━━━━━━━━━━━━━━━━━━ 5s 273ms/step - accuracy: 0.3854 - loss: 1.7340 - precision: 0.6391 - recall: 0.0885 4/24 ━━━━━━━━━━━━━━━━━━━━ 6s 305ms/step - accuracy: 0.4023 - loss: 1.6997 - precision: 0.6512 - recall: 0.0879 5/24 ━━━━━━━━━━━━━━━━━━━━ 5s 304ms/step - accuracy: 0.4094 - loss: 1.6780 - precision: 0.6610 - recall: 0.0878 6/24 ━━━━━━━━━━━━━━━━━━━━ 5s 299ms/step - accuracy: 0.4123 - loss: 1.6688 - precision: 0.6740 - recall: 0.0879 7/24 ━━━━━━━━━━━━━━━━━━━━ 5s 303ms/step - accuracy: 0.4159 - loss: 1.6610 - precision: 0.6748 - recall: 0.0862 8/24 ━━━━━━━━━━━━━━━━━━━━ 4s 293ms/step - accuracy: 0.4186 - loss: 1.6542 - precision: 0.6785 - recall: 0.0847 9/24 ━━━━━━━━━━━━━━━━━━━━ 4s 289ms/step - accuracy: 0.4211 - loss: 1.6460 - precision: 0.6819 - recall: 0.083810/24 ━━━━━━━━━━━━━━━━━━━━ 4s 294ms/step - accuracy: 0.4227 - loss: 1.6390 - precision: 0.6860 - recall: 0.083511/24 ━━━━━━━━━━━━━━━━━━━━ 3s 289ms/step - accuracy: 0.4228 - loss: 1.6345 - precision: 0.6901 - recall: 0.083712/24 ━━━━━━━━━━━━━━━━━━━━ 3s 285ms/step - accuracy: 0.4238 - loss: 1.6314 - precision: 0.6956 - recall: 0.084114/24 ━━━━━━━━━━━━━━━━━━━━ 2s 262ms/step - accuracy: 0.4251 - loss: 1.6261 - precision: 0.7010 - recall: 0.085415/24 ━━━━━━━━━━━━━━━━━━━━ 2s 258ms/step - accuracy: 0.4248 - loss: 1.6246 - precision: 0.6991 - recall: 0.086316/24 ━━━━━━━━━━━━━━━━━━━━ 2s 254ms/step - accuracy: 0.4240 - loss: 1.6240 - precision: 0.6952 - recall: 0.087417/24 ━━━━━━━━━━━━━━━━━━━━ 1s 251ms/step - accuracy: 0.4236 - loss: 1.6226 - precision: 0.6919 - recall: 0.089318/24 ━━━━━━━━━━━━━━━━━━━━ 1s 248ms/step - accuracy: 0.4236 - loss: 1.6208 - precision: 0.6882 - recall: 0.090819/24 ━━━━━━━━━━━━━━━━━━━━ 1s 246ms/step - accuracy: 0.4238 - loss: 1.6187 - precision: 0.6850 - recall: 0.092720/24 ━━━━━━━━━━━━━━━━━━━━ 0s 245ms/step - accuracy: 0.4243 - loss: 1.6159 - precision: 0.6827 - recall: 0.095021/24 ━━━━━━━━━━━━━━━━━━━━ 0s 244ms/step - accuracy: 0.4248 - loss: 1.6133 - precision: 0.6813 - recall: 0.097522/24 ━━━━━━━━━━━━━━━━━━━━ 0s 242ms/step - accuracy: 0.4249 - loss: 1.6117 - precision: 0.6800 - recall: 0.099923/24 ━━━━━━━━━━━━━━━━━━━━ 0s 242ms/step - accuracy: 0.4249 - loss: 1.6100 - precision: 0.6788 - recall: 0.102024/24 ━━━━━━━━━━━━━━━━━━━━ 0s 241ms/step - accuracy: 0.4252 - loss: 1.6084 - precision: 0.6777 - recall: 0.104224/24 ━━━━━━━━━━━━━━━━━━━━ 7s 276ms/step - accuracy: 0.4255 - loss: 1.6069 - precision: 0.6767 - recall: 0.1062 - val_accuracy: 0.3784 - val_loss: 1.7572 - val_precision: 0.4048 - val_recall: 0.0919
Epoch 18/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 7s 317ms/step - accuracy: 0.4062 - loss: 1.4917 - precision: 0.6667 - recall: 0.0625 2/24 ━━━━━━━━━━━━━━━━━━━━ 5s 235ms/step - accuracy: 0.4297 - loss: 1.5140 - precision: 0.6667 - recall: 0.0781 3/24 ━━━━━━━━━━━━━━━━━━━━ 4s 225ms/step - accuracy: 0.4392 - loss: 1.5319 - precision: 0.6508 - recall: 0.0972 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 220ms/step - accuracy: 0.4466 - loss: 1.5412 - precision: 0.6381 - recall: 0.1081 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 219ms/step - accuracy: 0.4485 - loss: 1.5401 - precision: 0.6399 - recall: 0.1140 6/24 ━━━━━━━━━━━━━━━━━━━━ 3s 219ms/step - accuracy: 0.4484 - loss: 1.5447 - precision: 0.6416 - recall: 0.1175 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 216ms/step - accuracy: 0.4482 - loss: 1.5471 - precision: 0.6431 - recall: 0.1199 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 213ms/step - accuracy: 0.4473 - loss: 1.5491 - precision: 0.6476 - recall: 0.1225 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 213ms/step - accuracy: 0.4454 - loss: 1.5495 - precision: 0.6468 - recall: 0.124710/24 ━━━━━━━━━━━━━━━━━━━━ 2s 213ms/step - accuracy: 0.4437 - loss: 1.5477 - precision: 0.6479 - recall: 0.126611/24 ━━━━━━━━━━━━━━━━━━━━ 2s 215ms/step - accuracy: 0.4431 - loss: 1.5454 - precision: 0.6488 - recall: 0.128512/24 ━━━━━━━━━━━━━━━━━━━━ 2s 214ms/step - accuracy: 0.4435 - loss: 1.5436 - precision: 0.6493 - recall: 0.130213/24 ━━━━━━━━━━━━━━━━━━━━ 2s 213ms/step - accuracy: 0.4438 - loss: 1.5422 - precision: 0.6515 - recall: 0.132214/24 ━━━━━━━━━━━━━━━━━━━━ 2s 212ms/step - accuracy: 0.4437 - loss: 1.5409 - precision: 0.6528 - recall: 0.133715/24 ━━━━━━━━━━━━━━━━━━━━ 1s 213ms/step - accuracy: 0.4434 - loss: 1.5404 - precision: 0.6549 - recall: 0.135116/24 ━━━━━━━━━━━━━━━━━━━━ 1s 203ms/step - accuracy: 0.4432 - loss: 1.5407 - precision: 0.6564 - recall: 0.136117/24 ━━━━━━━━━━━━━━━━━━━━ 1s 203ms/step - accuracy: 0.4426 - loss: 1.5415 - precision: 0.6564 - recall: 0.136918/24 ━━━━━━━━━━━━━━━━━━━━ 1s 203ms/step - accuracy: 0.4424 - loss: 1.5421 - precision: 0.6567 - recall: 0.137819/24 ━━━━━━━━━━━━━━━━━━━━ 1s 203ms/step - accuracy: 0.4423 - loss: 1.5421 - precision: 0.6567 - recall: 0.138520/24 ━━━━━━━━━━━━━━━━━━━━ 1s 361ms/step - accuracy: 0.4421 - loss: 1.5426 - precision: 0.6566 - recall: 0.139121/24 ━━━━━━━━━━━━━━━━━━━━ 1s 353ms/step - accuracy: 0.4417 - loss: 1.5431 - precision: 0.6566 - recall: 0.139522/24 ━━━━━━━━━━━━━━━━━━━━ 0s 346ms/step - accuracy: 0.4414 - loss: 1.5436 - precision: 0.6566 - recall: 0.139823/24 ━━━━━━━━━━━━━━━━━━━━ 0s 339ms/step - accuracy: 0.4410 - loss: 1.5442 - precision: 0.6567 - recall: 0.140024/24 ━━━━━━━━━━━━━━━━━━━━ 0s 333ms/step - accuracy: 0.4404 - loss: 1.5448 - precision: 0.6570 - recall: 0.140124/24 ━━━━━━━━━━━━━━━━━━━━ 9s 370ms/step - accuracy: 0.4398 - loss: 1.5454 - precision: 0.6572 - recall: 0.1402 - val_accuracy: 0.4000 - val_loss: 1.6811 - val_precision: 0.5312 - val_recall: 0.0919
Epoch 19/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 2s 104ms/step - accuracy: 0.3750 - loss: 1.3887 - precision: 1.0000 - recall: 0.1250 2/24 ━━━━━━━━━━━━━━━━━━━━ 6s 288ms/step - accuracy: 0.4125 - loss: 1.3765 - precision: 0.9000 - recall: 0.1125 3/24 ━━━━━━━━━━━━━━━━━━━━ 5s 256ms/step - accuracy: 0.4185 - loss: 1.4361 - precision: 0.8667 - recall: 0.1120 4/24 ━━━━━━━━━━━━━━━━━━━━ 4s 240ms/step - accuracy: 0.4365 - loss: 1.4591 - precision: 0.8583 - recall: 0.1081 5/24 ━━━━━━━━━━━━━━━━━━━━ 4s 233ms/step - accuracy: 0.4433 - loss: 1.4707 - precision: 0.8412 - recall: 0.1115 6/24 ━━━━━━━━━━━━━━━━━━━━ 4s 236ms/step - accuracy: 0.4458 - loss: 1.4816 - precision: 0.8274 - recall: 0.1147 7/24 ━━━━━━━━━━━━━━━━━━━━ 3s 233ms/step - accuracy: 0.4471 - loss: 1.4875 - precision: 0.8107 - recall: 0.1176 8/24 ━━━━━━━━━━━━━━━━━━━━ 3s 230ms/step - accuracy: 0.4462 - loss: 1.4930 - precision: 0.7945 - recall: 0.1201 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 227ms/step - accuracy: 0.4463 - loss: 1.4964 - precision: 0.7840 - recall: 0.121510/24 ━━━━━━━━━━━━━━━━━━━━ 3s 230ms/step - accuracy: 0.4456 - loss: 1.5014 - precision: 0.7741 - recall: 0.121911/24 ━━━━━━━━━━━━━━━━━━━━ 3s 231ms/step - accuracy: 0.4439 - loss: 1.5090 - precision: 0.7644 - recall: 0.121912/24 ━━━━━━━━━━━━━━━━━━━━ 2s 229ms/step - accuracy: 0.4439 - loss: 1.5128 - precision: 0.7579 - recall: 0.122413/24 ━━━━━━━━━━━━━━━━━━━━ 2s 227ms/step - accuracy: 0.4429 - loss: 1.5166 - precision: 0.7529 - recall: 0.123214/24 ━━━━━━━━━━━━━━━━━━━━ 2s 229ms/step - accuracy: 0.4423 - loss: 1.5192 - precision: 0.7488 - recall: 0.124015/24 ━━━━━━━━━━━━━━━━━━━━ 2s 228ms/step - accuracy: 0.4416 - loss: 1.5218 - precision: 0.7445 - recall: 0.124916/24 ━━━━━━━━━━━━━━━━━━━━ 1s 227ms/step - accuracy: 0.4413 - loss: 1.5235 - precision: 0.7410 - recall: 0.125617/24 ━━━━━━━━━━━━━━━━━━━━ 1s 226ms/step - accuracy: 0.4408 - loss: 1.5247 - precision: 0.7385 - recall: 0.126318/24 ━━━━━━━━━━━━━━━━━━━━ 1s 227ms/step - accuracy: 0.4409 - loss: 1.5249 - precision: 0.7358 - recall: 0.126919/24 ━━━━━━━━━━━━━━━━━━━━ 1s 229ms/step - accuracy: 0.4414 - loss: 1.5249 - precision: 0.7334 - recall: 0.127820/24 ━━━━━━━━━━━━━━━━━━━━ 0s 229ms/step - accuracy: 0.4418 - loss: 1.5245 - precision: 0.7316 - recall: 0.129021/24 ━━━━━━━━━━━━━━━━━━━━ 0s 228ms/step - accuracy: 0.4420 - loss: 1.5249 - precision: 0.7297 - recall: 0.130122/24 ━━━━━━━━━━━━━━━━━━━━ 0s 229ms/step - accuracy: 0.4421 - loss: 1.5252 - precision: 0.7279 - recall: 0.131323/24 ━━━━━━━━━━━━━━━━━━━━ 0s 227ms/step - accuracy: 0.4420 - loss: 1.5260 - precision: 0.7260 - recall: 0.132524/24 ━━━━━━━━━━━━━━━━━━━━ 0s 226ms/step - accuracy: 0.4420 - loss: 1.5266 - precision: 0.7239 - recall: 0.1335
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
24/24 ━━━━━━━━━━━━━━━━━━━━ 6s 268ms/step - accuracy: 0.4420 - loss: 1.5273 - precision: 0.7220 - recall: 0.1345 - val_accuracy: 0.4216 - val_loss: 1.6487 - val_precision: 0.6667 - val_recall: 0.1946
Epoch 20/20
1/24 ━━━━━━━━━━━━━━━━━━━━ 10s 443ms/step - accuracy: 0.5000 - loss: 1.3198 - precision: 0.7273 - recall: 0.2500 2/24 ━━━━━━━━━━━━━━━━━━━━ 7s 332ms/step - accuracy: 0.5156 - loss: 1.3002 - precision: 0.7684 - recall: 0.2578 3/24 ━━━━━━━━━━━━━━━━━━━━ 6s 298ms/step - accuracy: 0.5104 - loss: 1.3060 - precision: 0.7766 - recall: 0.2517 4/24 ━━━━━━━━━━━━━━━━━━━━ 6s 305ms/step - accuracy: 0.5039 - loss: 1.3223 - precision: 0.7719 - recall: 0.2376 5/24 ━━━━━━━━━━━━━━━━━━━━ 5s 294ms/step - accuracy: 0.4994 - loss: 1.3367 - precision: 0.7675 - recall: 0.2314 6/24 ━━━━━━━━━━━━━━━━━━━━ 5s 281ms/step - accuracy: 0.4908 - loss: 1.3596 - precision: 0.7618 - recall: 0.2214 7/24 ━━━━━━━━━━━━━━━━━━━━ 4s 272ms/step - accuracy: 0.4838 - loss: 1.3746 - precision: 0.7569 - recall: 0.2153 8/24 ━━━━━━━━━━━━━━━━━━━━ 4s 264ms/step - accuracy: 0.4795 - loss: 1.3856 - precision: 0.7526 - recall: 0.2114 9/24 ━━━━━━━━━━━━━━━━━━━━ 3s 256ms/step - accuracy: 0.4768 - loss: 1.3944 - precision: 0.7502 - recall: 0.209910/24 ━━━━━━━━━━━━━━━━━━━━ 3s 250ms/step - accuracy: 0.4747 - loss: 1.4038 - precision: 0.7496 - recall: 0.208911/24 ━━━━━━━━━━━━━━━━━━━━ 3s 246ms/step - accuracy: 0.4747 - loss: 1.4100 - precision: 0.7499 - recall: 0.209512/24 ━━━━━━━━━━━━━━━━━━━━ 2s 242ms/step - accuracy: 0.4738 - loss: 1.4149 - precision: 0.7486 - recall: 0.210113/24 ━━━━━━━━━━━━━━━━━━━━ 2s 239ms/step - accuracy: 0.4728 - loss: 1.4192 - precision: 0.7460 - recall: 0.210214/24 ━━━━━━━━━━━━━━━━━━━━ 2s 236ms/step - accuracy: 0.4720 - loss: 1.4231 - precision: 0.7445 - recall: 0.209815/24 ━━━━━━━━━━━━━━━━━━━━ 2s 232ms/step - accuracy: 0.4714 - loss: 1.4267 - precision: 0.7432 - recall: 0.209716/24 ━━━━━━━━━━━━━━━━━━━━ 1s 231ms/step - accuracy: 0.4706 - loss: 1.4304 - precision: 0.7417 - recall: 0.209417/24 ━━━━━━━━━━━━━━━━━━━━ 1s 228ms/step - accuracy: 0.4700 - loss: 1.4340 - precision: 0.7393 - recall: 0.208818/24 ━━━━━━━━━━━━━━━━━━━━ 1s 226ms/step - accuracy: 0.4694 - loss: 1.4374 - precision: 0.7369 - recall: 0.208019/24 ━━━━━━━━━━━━━━━━━━━━ 1s 224ms/step - accuracy: 0.4688 - loss: 1.4407 - precision: 0.7343 - recall: 0.207020/24 ━━━━━━━━━━━━━━━━━━━━ 0s 223ms/step - accuracy: 0.4680 - loss: 1.4439 - precision: 0.7322 - recall: 0.206121/24 ━━━━━━━━━━━━━━━━━━━━ 0s 223ms/step - accuracy: 0.4670 - loss: 1.4474 - precision: 0.7305 - recall: 0.205122/24 ━━━━━━━━━━━━━━━━━━━━ 0s 221ms/step - accuracy: 0.4658 - loss: 1.4510 - precision: 0.7286 - recall: 0.203924/24 ━━━━━━━━━━━━━━━━━━━━ 0s 213ms/step - accuracy: 0.4640 - loss: 1.4567 - precision: 0.7254 - recall: 0.201724/24 ━━━━━━━━━━━━━━━━━━━━ 6s 247ms/step - accuracy: 0.4634 - loss: 1.4588 - precision: 0.7241 - recall: 0.2008 - val_accuracy: 0.3568 - val_loss: 1.7337 - val_precision: 0.5094 - val_recall: 0.1459
def plot_accuracy_loss(history):
"""
Plot the accuracy and the loss during the training of the CNN.
"""
fig = plt.figure(figsize= (10 ,5 ))
# Plot accuracy
plt.subplot(221 )
plt.plot(history.history['accuracy' ], 'bo--' , label = "acc" )
plt.plot(history.history['val_accuracy' ], 'ro--' , label = "val_acc" )
plt.title("train_acc vs val_acc" )
plt.ylabel("accuracy" )
plt.xlabel("epochs" )
plt.legend()
# Plot loss function
plt.subplot(222 )
plt.plot(history.history['loss' ],'bo--' , label = "loss" )
plt.plot(history.history['val_loss' ], 'ro--' , label = "val_loss" )
plt.title("train_loss vs val_loss" )
plt.ylabel("loss" )
plt.xlabel("epochs" )
plt.legend()
plt.show()
plot_accuracy_loss(history)
Evaluate the Model
best_model = save_model(model, "best_model.keras" )
# Load the model, including both architecture and weights
saved_model = load_model('best_model.keras' )
results = saved_model.evaluate(test_images)
print (f"Test Loss: { results[0 ]:.4f} " )
print (f"Test Accuracy: { results[1 ]* 100 :.2f} %" )
print (f"Test Precision: { results[2 ]* 100 :.2f} %" )
1/8 ━━━━━━━━━━━━━━━━━━━━ 3s 553ms/step - accuracy: 0.5000 - loss: 1.4016 - precision: 1.0000 - recall: 0.18752/8 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step - accuracy: 0.4844 - loss: 1.4480 - precision: 0.9118 - recall: 0.20313/8 ━━━━━━━━━━━━━━━━━━━━ 0s 133ms/step - accuracy: 0.4757 - loss: 1.4687 - precision: 0.8345 - recall: 0.19444/8 ━━━━━━━━━━━━━━━━━━━━ 0s 136ms/step - accuracy: 0.4720 - loss: 1.4834 - precision: 0.7545 - recall: 0.18105/8 ━━━━━━━━━━━━━━━━━━━━ 0s 144ms/step - accuracy: 0.4676 - loss: 1.4973 - precision: 0.7102 - recall: 0.17486/8 ━━━━━━━━━━━━━━━━━━━━ 0s 144ms/step - accuracy: 0.4635 - loss: 1.5156 - precision: 0.6768 - recall: 0.16917/8 ━━━━━━━━━━━━━━━━━━━━ 0s 151ms/step - accuracy: 0.4604 - loss: 1.5258 - precision: 0.6563 - recall: 0.16538/8 ━━━━━━━━━━━━━━━━━━━━ 2s 137ms/step - accuracy: 0.4554 - loss: 1.5386 - precision: 0.6287 - recall: 0.1601
Test Loss: 1.5836
Test Accuracy: 43.78 %
Test Precision: 53.23 %
Plot Heatmap of the Confusion Matrix and Print Classification Report
predictions = np.argmax(model.predict(test_images), axis= 1 )
cm = confusion_matrix(test_images.labels, predictions)
report = classification_report(test_images.labels, predictions, target_names= list (train_images.class_indices.keys()))
plt.figure(figsize= (12 , 12 ))
sns.heatmap(cm, annot= True , fmt= 'g' , vmin= 0 , cmap= 'Greens' , cbar= False )
plt.xticks(ticks= np.arange(9 ) + 0.5 , labels= list (train_images.class_indices.keys()))
plt.yticks(ticks= np.arange(9 ) + 0.5 , labels= list (train_images.class_indices.keys()))
plt.xlabel("Predicted" )
plt.ylabel("Actual" )
plt.title("Confusion Matrix" )
plt.show()
print (" \n " )
print ("Classification Report: \n ---------------------- \n " , report)
1/8 ━━━━━━━━━━━━━━━━━━━━ 1s 236ms/step2/8 ━━━━━━━━━━━━━━━━━━━━ 0s 110ms/step3/8 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step4/8 ━━━━━━━━━━━━━━━━━━━━ 0s 115ms/step5/8 ━━━━━━━━━━━━━━━━━━━━ 0s 120ms/step6/8 ━━━━━━━━━━━━━━━━━━━━ 0s 123ms/step7/8 ━━━━━━━━━━━━━━━━━━━━ 0s 122ms/step8/8 ━━━━━━━━━━━━━━━━━━━━ 0s 114ms/step8/8 ━━━━━━━━━━━━━━━━━━━━ 1s 115ms/step
Classification Report:
----------------------
precision recall f1-score support
buoy 0.00 0.00 0.00 12
cruise_ship 0.36 0.10 0.16 39
ferry_boat 0.00 0.00 0.00 12
freight_boat 0.00 0.00 0.00 4
gondola 0.51 0.78 0.62 45
inflatable_boat 0.00 0.00 0.00 4
kayak 0.43 0.39 0.41 38
paper_boat 0.00 0.00 0.00 6
sailboat 0.40 0.66 0.50 73
accuracy 0.44 233
macro avg 0.19 0.21 0.19 233
weighted avg 0.36 0.44 0.37 233
Section 2: Transfer Learning via MobileNetV2
Create a new dataset to use with the MobileNetV2 pre-trained model
mn_train_df, mn_test_df = train_test_split(image_df, train_size= 0.7 , shuffle= True , random_state= 1 )
Load the Image Data
mn_train_generator = ImageDataGenerator(
rescale= 1. / 255 ,
validation_split= 0.2
)
mn_test_generator = ImageDataGenerator(rescale= 1. / 255 )
batch_size = 32
img_width, img_height = (224 , 224 )
mn_train_images = train_generator.flow_from_dataframe(
dataframe= mn_train_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= True ,
seed= 1 ,
subset= 'training'
)
mn_val_images = train_generator.flow_from_dataframe(
dataframe= mn_train_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= True ,
seed= 1 ,
subset= 'validation'
)
mn_test_images = test_generator.flow_from_dataframe(
dataframe= mn_test_df,
x_col= 'Filepath' ,
y_col= 'Label' ,
target_size= (img_width, img_height),
color_mode= 'rgb' ,
class_mode= 'categorical' ,
batch_size= batch_size,
shuffle= False
)
Found 651 validated image filenames belonging to 9 classes.
Found 162 validated image filenames belonging to 9 classes.
Found 349 validated image filenames belonging to 9 classes.
Build the Model
channel = 3
num_classes = len (class_names)
# Load MobileNetV2 - Light Model
mn_v2_light = MobileNetV2(include_top= False , weights= 'imagenet' , input_shape= (img_width, img_height, channel))
# Create a Sequential model
mn_model = Sequential()
# Add MobileNetV2 as the first layer
mn_model.add(mn_v2_light)
# Add other layers
mn_model.add(GlobalAveragePooling2D())
mn_model.add(Dropout(0.2 ))
mn_model.add(Dense(256 , activation= 'relu' ))
mn_model.add(BatchNormalization())
mn_model.add(Dropout(0.1 ))
mn_model.add(Dense(128 , activation= 'relu' ))
mn_model.add(BatchNormalization())
mn_model.add(Dropout(0.1 ))
mn_model.add(Dense(128 , activation= 'relu' ))
mn_model.add(Dense(128 , activation= 'relu' ))
mn_model.add(Dense(num_classes, activation= 'softmax' ))
# Display the summary of the model architecture and the number of parameters
mn_model.summary()
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Layer (type) ┃ Output Shape ┃ Param # ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ mobilenetv2_1.00_224 │ (None , 7 , 7 , 1280 ) │ 2,257,984 │
│ (Functional ) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ global_average_pooling2d_1 │ (None , 1280 ) │ 0 │
│ (GlobalAveragePooling2D ) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout (Dropout ) │ (None , 1280 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_3 (Dense ) │ (None , 256 ) │ 327,936 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization │ (None , 256 ) │ 1,024 │
│ (BatchNormalization ) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_1 (Dropout ) │ (None , 256 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_4 (Dense ) │ (None , 128 ) │ 32,896 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ batch_normalization_1 │ (None , 128 ) │ 512 │
│ (BatchNormalization ) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dropout_2 (Dropout ) │ (None , 128 ) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_5 (Dense ) │ (None , 128 ) │ 16,512 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_6 (Dense ) │ (None , 128 ) │ 16,512 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ dense_7 (Dense ) │ (None , 9 ) │ 1,161 │
└─────────────────────────────────┴────────────────────────┴───────────────┘
Total params: 2,654,537 (10.13 MB)
Trainable params: 2,619,657 (9.99 MB)
Non-trainable params: 34,880 (136.25 KB)
Compile the Model
mn_model.compile (
optimizer = 'adam' ,
loss = 'categorical_crossentropy' ,
metrics = ['accuracy' ,
Precision(),
Recall(),
]
)
Train the Model
Train the model with 50
epochs and we’ll plot training loss and accuracy against epochs. We want to monitor the validation loss at each epoch and after the validation loss has not improved after two epochs, training is interrupted.
# Define the early stopping callback
early_stopping = EarlyStopping(monitor= 'val_loss' ,
patience= 10 ,
restore_best_weights= True )
# Define checkpoints
checkpoint = ModelCheckpoint('best_mn_model.weights.h5' ,
save_best_only= True ,
save_weights_only= True ,
monitor= 'val_loss' ,
mode= 'min' ,
verbose= 1 )
epochs= 50
# Train the model with early stopping and model checkpointing
history = mn_model.fit(
mn_train_images,
epochs= epochs,
validation_data= mn_val_images,
callbacks= [early_stopping, checkpoint]
)
Epoch 1/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 7:31 23s/step - accuracy: 0.3125 - loss: 2.1215 - precision_1: 0.2500 - recall_1: 0.0312 2/21 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - accuracy: 0.2969 - loss: 2.1332 - precision_1: 0.2917 - recall_1: 0.0391 3/21 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - accuracy: 0.2882 - loss: 2.1302 - precision_1: 0.3317 - recall_1: 0.0503 4/21 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - accuracy: 0.2839 - loss: 2.1252 - precision_1: 0.3460 - recall_1: 0.0541 5/21 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - accuracy: 0.2904 - loss: 2.0994 - precision_1: 0.3768 - recall_1: 0.0591 6/21 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - accuracy: 0.3005 - loss: 2.0645 - precision_1: 0.4174 - recall_1: 0.0668 7/21 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - accuracy: 0.3118 - loss: 2.0336 - precision_1: 0.4517 - recall_1: 0.0735 8/21 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - accuracy: 0.3228 - loss: 2.0034 - precision_1: 0.4827 - recall_1: 0.0792 9/21 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - accuracy: 0.3348 - loss: 1.9717 - precision_1: 0.5097 - recall_1: 0.085810/21 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.3451 - loss: 1.9436 - precision_1: 0.5333 - recall_1: 0.092911/21 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - accuracy: 0.3552 - loss: 1.9172 - precision_1: 0.5542 - recall_1: 0.101212/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.3649 - loss: 1.8935 - precision_1: 0.5722 - recall_1: 0.109813/21 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - accuracy: 0.3744 - loss: 1.8698 - precision_1: 0.5879 - recall_1: 0.1189 14/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.3831 - loss: 1.8476 - precision_1: 0.6013 - recall_1: 0.127815/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.3908 - loss: 1.8280 - precision_1: 0.6120 - recall_1: 0.135916/21 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - accuracy: 0.3990 - loss: 1.8072 - precision_1: 0.6233 - recall_1: 0.144917/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.4068 - loss: 1.7870 - precision_1: 0.6337 - recall_1: 0.154018/21 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - accuracy: 0.4148 - loss: 1.7672 - precision_1: 0.6437 - recall_1: 0.163319/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.4224 - loss: 1.7482 - precision_1: 0.6526 - recall_1: 0.172620/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.4292 - loss: 1.7308 - precision_1: 0.6604 - recall_1: 0.181421/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.4360 - loss: 1.7136 - precision_1: 0.6679 - recall_1: 0.1901
Epoch 1: val_loss improved from inf to 1.45730, saving model to best_mn_model.weights.h5
21/21 ━━━━━━━━━━━━━━━━━━━━ 53s 2s/step - accuracy: 0.4422 - loss: 1.6979 - precision_1: 0.6747 - recall_1: 0.1981 - val_accuracy: 0.5617 - val_loss: 1.4573 - val_precision_1: 0.5938 - val_recall_1: 0.4691
Epoch 2/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 28s 1s/step - accuracy: 0.8125 - loss: 0.7959 - precision_1: 0.8519 - recall_1: 0.7188 2/21 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - accuracy: 0.7891 - loss: 0.8307 - precision_1: 0.8490 - recall_1: 0.7031 3/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.7830 - loss: 0.8194 - precision_1: 0.8566 - recall_1: 0.7049 4/21 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - accuracy: 0.7826 - loss: 0.8044 - precision_1: 0.8600 - recall_1: 0.7122 5/21 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - accuracy: 0.7800 - loss: 0.8032 - precision_1: 0.8604 - recall_1: 0.7137 6/21 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - accuracy: 0.7767 - loss: 0.8035 - precision_1: 0.8623 - recall_1: 0.7136 7/21 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - accuracy: 0.7741 - loss: 0.8024 - precision_1: 0.8631 - recall_1: 0.7137 8/21 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - accuracy: 0.7710 - loss: 0.8053 - precision_1: 0.8621 - recall_1: 0.7123 9/21 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.7681 - loss: 0.8092 - precision_1: 0.8607 - recall_1: 0.710510/21 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - accuracy: 0.7646 - loss: 0.8141 - precision_1: 0.8600 - recall_1: 0.708011/21 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - accuracy: 0.7607 - loss: 0.8218 - precision_1: 0.8581 - recall_1: 0.704912/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.7574 - loss: 0.8288 - precision_1: 0.8563 - recall_1: 0.701713/21 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - accuracy: 0.7551 - loss: 0.8332 - precision_1: 0.8553 - recall_1: 0.6992 14/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.7538 - loss: 0.8355 - precision_1: 0.8551 - recall_1: 0.697215/21 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - accuracy: 0.7517 - loss: 0.8412 - precision_1: 0.8547 - recall_1: 0.694016/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.7500 - loss: 0.8455 - precision_1: 0.8545 - recall_1: 0.691517/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.7487 - loss: 0.8486 - precision_1: 0.8546 - recall_1: 0.689318/21 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - accuracy: 0.7477 - loss: 0.8511 - precision_1: 0.8550 - recall_1: 0.687319/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.7470 - loss: 0.8530 - precision_1: 0.8556 - recall_1: 0.685320/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.7464 - loss: 0.8546 - precision_1: 0.8561 - recall_1: 0.683521/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.7458 - loss: 0.8569 - precision_1: 0.8564 - recall_1: 0.6817
Epoch 2: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - accuracy: 0.7452 - loss: 0.8591 - precision_1: 0.8567 - recall_1: 0.6801 - val_accuracy: 0.6049 - val_loss: 1.5676 - val_precision_1: 0.6338 - val_recall_1: 0.5556
Epoch 3/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - accuracy: 0.7500 - loss: 0.8723 - precision_1: 0.9200 - recall_1: 0.7188 2/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.7500 - loss: 0.8378 - precision_1: 0.9100 - recall_1: 0.7109 3/21 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - accuracy: 0.7674 - loss: 0.7779 - precision_1: 0.9175 - recall_1: 0.7135 4/21 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - accuracy: 0.7767 - loss: 0.7433 - precision_1: 0.9226 - recall_1: 0.7129 5/21 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - accuracy: 0.7811 - loss: 0.7257 - precision_1: 0.9247 - recall_1: 0.7099 6/21 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - accuracy: 0.7825 - loss: 0.7165 - precision_1: 0.9231 - recall_1: 0.7076 7/21 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - accuracy: 0.7847 - loss: 0.7089 - precision_1: 0.9223 - recall_1: 0.7078 8/21 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.7850 - loss: 0.7087 - precision_1: 0.9196 - recall_1: 0.7060 9/21 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.7868 - loss: 0.7058 - precision_1: 0.9187 - recall_1: 0.705410/21 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - accuracy: 0.7891 - loss: 0.7013 - precision_1: 0.9179 - recall_1: 0.706111/21 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - accuracy: 0.7896 - loss: 0.6992 - precision_1: 0.9169 - recall_1: 0.705912/21 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - accuracy: 0.7901 - loss: 0.6967 - precision_1: 0.9161 - recall_1: 0.7061 13/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.7909 - loss: 0.6936 - precision_1: 0.9158 - recall_1: 0.706514/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.7919 - loss: 0.6898 - precision_1: 0.9161 - recall_1: 0.707515/21 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - accuracy: 0.7925 - loss: 0.6869 - precision_1: 0.9159 - recall_1: 0.708216/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.7931 - loss: 0.6843 - precision_1: 0.9160 - recall_1: 0.708517/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.7937 - loss: 0.6814 - precision_1: 0.9159 - recall_1: 0.708818/21 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - accuracy: 0.7936 - loss: 0.6796 - precision_1: 0.9157 - recall_1: 0.708919/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.7936 - loss: 0.6776 - precision_1: 0.9154 - recall_1: 0.709220/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.7938 - loss: 0.6758 - precision_1: 0.9151 - recall_1: 0.709521/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.7939 - loss: 0.6741 - precision_1: 0.9147 - recall_1: 0.7099
Epoch 3: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - accuracy: 0.7939 - loss: 0.6725 - precision_1: 0.9144 - recall_1: 0.7102 - val_accuracy: 0.4938 - val_loss: 1.6468 - val_precision_1: 0.5825 - val_recall_1: 0.3704
Epoch 4/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - accuracy: 0.8750 - loss: 0.3259 - precision_1: 0.9310 - recall_1: 0.8438 2/21 ━━━━━━━━━━━━━━━━━━━━ 1:23 4s/step - accuracy: 0.8750 - loss: 0.3657 - precision_1: 0.9298 - recall_1: 0.8281 3/21 ━━━━━━━━━━━━━━━━━━━━ 52s 3s/step - accuracy: 0.8785 - loss: 0.3685 - precision_1: 0.9369 - recall_1: 0.8229 4/21 ━━━━━━━━━━━━━━━━━━━━ 40s 2s/step - accuracy: 0.8717 - loss: 0.3815 - precision_1: 0.9364 - recall_1: 0.8125 5/21 ━━━━━━━━━━━━━━━━━━━━ 30s 2s/step - accuracy: 0.8686 - loss: 0.3901 - precision_1: 0.9354 - recall_1: 0.8068 6/21 ━━━━━━━━━━━━━━━━━━━━ 26s 2s/step - accuracy: 0.8700 - loss: 0.3895 - precision_1: 0.9360 - recall_1: 0.8069 7/21 ━━━━━━━━━━━━━━━━━━━━ 23s 2s/step - accuracy: 0.8696 - loss: 0.3930 - precision_1: 0.9361 - recall_1: 0.8063 8/21 ━━━━━━━━━━━━━━━━━━━━ 21s 2s/step - accuracy: 0.8700 - loss: 0.3946 - precision_1: 0.9360 - recall_1: 0.8055 9/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.8694 - loss: 0.3977 - precision_1: 0.9348 - recall_1: 0.803810/21 ━━━━━━━━━━━━━━━━━━━━ 17s 2s/step - accuracy: 0.8691 - loss: 0.3995 - precision_1: 0.9339 - recall_1: 0.802411/21 ━━━━━━━━━━━━━━━━━━━━ 15s 2s/step - accuracy: 0.8673 - loss: 0.4042 - precision_1: 0.9318 - recall_1: 0.799712/21 ━━━━━━━━━━━━━━━━━━━━ 13s 2s/step - accuracy: 0.8655 - loss: 0.4092 - precision_1: 0.9296 - recall_1: 0.796913/21 ━━━━━━━━━━━━━━━━━━━━ 12s 2s/step - accuracy: 0.8639 - loss: 0.4135 - precision_1: 0.9277 - recall_1: 0.795014/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.8621 - loss: 0.4190 - precision_1: 0.9258 - recall_1: 0.792915/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.8607 - loss: 0.4233 - precision_1: 0.9243 - recall_1: 0.7915 16/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.8591 - loss: 0.4291 - precision_1: 0.9227 - recall_1: 0.789717/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.8576 - loss: 0.4345 - precision_1: 0.9212 - recall_1: 0.788218/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.8562 - loss: 0.4395 - precision_1: 0.9197 - recall_1: 0.786719/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.8547 - loss: 0.4444 - precision_1: 0.9183 - recall_1: 0.785320/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.8536 - loss: 0.4485 - precision_1: 0.9173 - recall_1: 0.784221/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.8527 - loss: 0.4522 - precision_1: 0.9165 - recall_1: 0.7832
Epoch 4: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - accuracy: 0.8518 - loss: 0.4556 - precision_1: 0.9157 - recall_1: 0.7823 - val_accuracy: 0.3457 - val_loss: 2.5689 - val_precision_1: 0.3967 - val_recall_1: 0.2963
Epoch 5/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - accuracy: 0.8750 - loss: 0.3048 - precision_1: 0.9643 - recall_1: 0.8438 2/21 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - accuracy: 0.8906 - loss: 0.2974 - precision_1: 0.9731 - recall_1: 0.8438 3/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.8958 - loss: 0.2959 - precision_1: 0.9739 - recall_1: 0.8403 4/21 ━━━━━━━━━━━━━━━━━━━━ 37s 2s/step - accuracy: 0.9023 - loss: 0.2894 - precision_1: 0.9760 - recall_1: 0.8451 5/21 ━━━━━━━━━━━━━━━━━━━━ 31s 2s/step - accuracy: 0.9019 - loss: 0.2987 - precision_1: 0.9750 - recall_1: 0.8435 6/21 ━━━━━━━━━━━━━━━━━━━━ 27s 2s/step - accuracy: 0.9000 - loss: 0.3099 - precision_1: 0.9711 - recall_1: 0.8401 7/21 ━━━━━━━━━━━━━━━━━━━━ 24s 2s/step - accuracy: 0.8983 - loss: 0.3181 - precision_1: 0.9672 - recall_1: 0.8381 8/21 ━━━━━━━━━━━━━━━━━━━━ 22s 2s/step - accuracy: 0.8944 - loss: 0.3263 - precision_1: 0.9634 - recall_1: 0.8349 9/21 ━━━━━━━━━━━━━━━━━━━━ 20s 2s/step - accuracy: 0.8911 - loss: 0.3322 - precision_1: 0.9613 - recall_1: 0.832810/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.8889 - loss: 0.3358 - precision_1: 0.9598 - recall_1: 0.832011/21 ━━━━━━━━━━━━━━━━━━━━ 16s 2s/step - accuracy: 0.8874 - loss: 0.3387 - precision_1: 0.9587 - recall_1: 0.831312/21 ━━━━━━━━━━━━━━━━━━━━ 14s 2s/step - accuracy: 0.8866 - loss: 0.3402 - precision_1: 0.9579 - recall_1: 0.831413/21 ━━━━━━━━━━━━━━━━━━━━ 12s 2s/step - accuracy: 0.8857 - loss: 0.3426 - precision_1: 0.9565 - recall_1: 0.831514/21 ━━━━━━━━━━━━━━━━━━━━ 11s 2s/step - accuracy: 0.8846 - loss: 0.3467 - precision_1: 0.9548 - recall_1: 0.831415/21 ━━━━━━━━━━━━━━━━━━━━ 9s 2s/step - accuracy: 0.8839 - loss: 0.3496 - precision_1: 0.9533 - recall_1: 0.8316 16/21 ━━━━━━━━━━━━━━━━━━━━ 7s 2s/step - accuracy: 0.8838 - loss: 0.3513 - precision_1: 0.9523 - recall_1: 0.832417/21 ━━━━━━━━━━━━━━━━━━━━ 6s 2s/step - accuracy: 0.8837 - loss: 0.3525 - precision_1: 0.9515 - recall_1: 0.833118/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.8833 - loss: 0.3551 - precision_1: 0.9506 - recall_1: 0.833319/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.8828 - loss: 0.3576 - precision_1: 0.9496 - recall_1: 0.833420/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.8824 - loss: 0.3598 - precision_1: 0.9486 - recall_1: 0.833621/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.8817 - loss: 0.3627 - precision_1: 0.9473 - recall_1: 0.8334
Epoch 5: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - accuracy: 0.8811 - loss: 0.3654 - precision_1: 0.9462 - recall_1: 0.8332 - val_accuracy: 0.2284 - val_loss: 3.4780 - val_precision_1: 0.2602 - val_recall_1: 0.1975
Epoch 6/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 30s 2s/step - accuracy: 0.8125 - loss: 0.5277 - precision_1: 0.8276 - recall_1: 0.7500 2/21 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - accuracy: 0.8516 - loss: 0.4349 - precision_1: 0.8646 - recall_1: 0.8047 3/21 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - accuracy: 0.8733 - loss: 0.3934 - precision_1: 0.8838 - recall_1: 0.8247 4/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.8815 - loss: 0.3744 - precision_1: 0.8940 - recall_1: 0.8333 5/21 ━━━━━━━━━━━━━━━━━━━━ 32s 2s/step - accuracy: 0.8902 - loss: 0.3569 - precision_1: 0.9031 - recall_1: 0.8417 6/21 ━━━━━━━━━━━━━━━━━━━━ 28s 2s/step - accuracy: 0.8911 - loss: 0.3621 - precision_1: 0.9051 - recall_1: 0.8420 7/21 ━━━━━━━━━━━━━━━━━━━━ 25s 2s/step - accuracy: 0.8914 - loss: 0.3660 - precision_1: 0.9069 - recall_1: 0.8423 8/21 ━━━━━━━━━━━━━━━━━━━━ 22s 2s/step - accuracy: 0.8923 - loss: 0.3661 - precision_1: 0.9090 - recall_1: 0.8434 9/21 ━━━━━━━━━━━━━━━━━━━━ 20s 2s/step - accuracy: 0.8919 - loss: 0.3678 - precision_1: 0.9099 - recall_1: 0.843510/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.8915 - loss: 0.3683 - precision_1: 0.9104 - recall_1: 0.843511/21 ━━━━━━━━━━━━━━━━━━━━ 16s 2s/step - accuracy: 0.8913 - loss: 0.3676 - precision_1: 0.9113 - recall_1: 0.844012/21 ━━━━━━━━━━━━━━━━━━━━ 14s 2s/step - accuracy: 0.8914 - loss: 0.3663 - precision_1: 0.9125 - recall_1: 0.844713/21 ━━━━━━━━━━━━━━━━━━━━ 12s 2s/step - accuracy: 0.8911 - loss: 0.3660 - precision_1: 0.9134 - recall_1: 0.844614/21 ━━━━━━━━━━━━━━━━━━━━ 11s 2s/step - accuracy: 0.8912 - loss: 0.3645 - precision_1: 0.9144 - recall_1: 0.845215/21 ━━━━━━━━━━━━━━━━━━━━ 9s 2s/step - accuracy: 0.8909 - loss: 0.3645 - precision_1: 0.9147 - recall_1: 0.8453 16/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.8907 - loss: 0.3643 - precision_1: 0.9152 - recall_1: 0.845717/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.8907 - loss: 0.3634 - precision_1: 0.9158 - recall_1: 0.846318/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.8908 - loss: 0.3627 - precision_1: 0.9164 - recall_1: 0.847019/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.8910 - loss: 0.3621 - precision_1: 0.9169 - recall_1: 0.847620/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.8909 - loss: 0.3620 - precision_1: 0.9174 - recall_1: 0.847921/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.8907 - loss: 0.3623 - precision_1: 0.9178 - recall_1: 0.8479
Epoch 6: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 32s 2s/step - accuracy: 0.8906 - loss: 0.3626 - precision_1: 0.9181 - recall_1: 0.8479 - val_accuracy: 0.1790 - val_loss: 4.7349 - val_precision_1: 0.1970 - val_recall_1: 0.1605
Epoch 7/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - accuracy: 0.9375 - loss: 0.2062 - precision_1: 0.9677 - recall_1: 0.9375 2/21 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - accuracy: 0.9375 - loss: 0.2021 - precision_1: 0.9757 - recall_1: 0.9375 3/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.9306 - loss: 0.2501 - precision_1: 0.9690 - recall_1: 0.9236 4/21 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - accuracy: 0.9225 - loss: 0.2899 - precision_1: 0.9601 - recall_1: 0.9115 5/21 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - accuracy: 0.9180 - loss: 0.3079 - precision_1: 0.9536 - recall_1: 0.9054 6/21 ━━━━━━━━━━━━━━━━━━━━ 26s 2s/step - accuracy: 0.9161 - loss: 0.3154 - precision_1: 0.9511 - recall_1: 0.9012 7/21 ━━━━━━━━━━━━━━━━━━━━ 23s 2s/step - accuracy: 0.9134 - loss: 0.3214 - precision_1: 0.9498 - recall_1: 0.8962 8/21 ━━━━━━━━━━━━━━━━━━━━ 21s 2s/step - accuracy: 0.9120 - loss: 0.3238 - precision_1: 0.9497 - recall_1: 0.8931 9/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.9094 - loss: 0.3332 - precision_1: 0.9481 - recall_1: 0.889510/21 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - accuracy: 0.9071 - loss: 0.3432 - precision_1: 0.9468 - recall_1: 0.886511/21 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - accuracy: 0.9054 - loss: 0.3503 - precision_1: 0.9457 - recall_1: 0.884212/21 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - accuracy: 0.9041 - loss: 0.3547 - precision_1: 0.9449 - recall_1: 0.882413/21 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - accuracy: 0.9027 - loss: 0.3598 - precision_1: 0.9437 - recall_1: 0.880714/21 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - accuracy: 0.9018 - loss: 0.3631 - precision_1: 0.9429 - recall_1: 0.8795 15/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.9005 - loss: 0.3666 - precision_1: 0.9416 - recall_1: 0.877816/21 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - accuracy: 0.8996 - loss: 0.3685 - precision_1: 0.9409 - recall_1: 0.876717/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.8989 - loss: 0.3698 - precision_1: 0.9403 - recall_1: 0.875718/21 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - accuracy: 0.8985 - loss: 0.3700 - precision_1: 0.9400 - recall_1: 0.875219/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.8979 - loss: 0.3710 - precision_1: 0.9396 - recall_1: 0.874420/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.8974 - loss: 0.3720 - precision_1: 0.9391 - recall_1: 0.873821/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.8968 - loss: 0.3731 - precision_1: 0.9386 - recall_1: 0.8730
Epoch 7: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 29s 1s/step - accuracy: 0.8964 - loss: 0.3741 - precision_1: 0.9381 - recall_1: 0.8724 - val_accuracy: 0.3333 - val_loss: 4.7201 - val_precision_1: 0.3312 - val_recall_1: 0.3148
Epoch 8/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 10s 511ms/step - accuracy: 1.0000 - loss: 0.1541 - precision_1: 1.0000 - recall_1: 0.9091 2/21 ━━━━━━━━━━━━━━━━━━━━ 23s 1s/step - accuracy: 0.9535 - loss: 0.2159 - precision_1: 0.9625 - recall_1: 0.8848 3/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.9423 - loss: 0.2339 - precision_1: 0.9519 - recall_1: 0.8876 4/21 ━━━━━━━━━━━━━━━━━━━━ 20s 1s/step - accuracy: 0.9310 - loss: 0.2577 - precision_1: 0.9464 - recall_1: 0.8830 5/21 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - accuracy: 0.9247 - loss: 0.2681 - precision_1: 0.9418 - recall_1: 0.8805 6/21 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - accuracy: 0.9197 - loss: 0.2740 - precision_1: 0.9400 - recall_1: 0.8780 7/21 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - accuracy: 0.9150 - loss: 0.2816 - precision_1: 0.9379 - recall_1: 0.8743 8/21 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - accuracy: 0.9112 - loss: 0.2879 - precision_1: 0.9364 - recall_1: 0.8719 9/21 ━━━━━━━━━━━━━━━━━━━━ 14s 1s/step - accuracy: 0.9078 - loss: 0.2954 - precision_1: 0.9345 - recall_1: 0.869510/21 ━━━━━━━━━━━━━━━━━━━━ 17s 2s/step - accuracy: 0.9046 - loss: 0.3040 - precision_1: 0.9324 - recall_1: 0.866911/21 ━━━━━━━━━━━━━━━━━━━━ 15s 2s/step - accuracy: 0.9020 - loss: 0.3119 - precision_1: 0.9302 - recall_1: 0.864712/21 ━━━━━━━━━━━━━━━━━━━━ 13s 2s/step - accuracy: 0.9003 - loss: 0.3174 - precision_1: 0.9287 - recall_1: 0.863613/21 ━━━━━━━━━━━━━━━━━━━━ 12s 2s/step - accuracy: 0.8990 - loss: 0.3224 - precision_1: 0.9273 - recall_1: 0.863014/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.8974 - loss: 0.3274 - precision_1: 0.9260 - recall_1: 0.861915/21 ━━━━━━━━━━━━━━━━━━━━ 8s 1s/step - accuracy: 0.8964 - loss: 0.3305 - precision_1: 0.9252 - recall_1: 0.8613 16/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.8957 - loss: 0.3323 - precision_1: 0.9247 - recall_1: 0.861117/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.8949 - loss: 0.3358 - precision_1: 0.9242 - recall_1: 0.860518/21 ━━━━━━━━━━━━━━━━━━━━ 4s 1s/step - accuracy: 0.8943 - loss: 0.3388 - precision_1: 0.9239 - recall_1: 0.860019/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.8936 - loss: 0.3415 - precision_1: 0.9234 - recall_1: 0.859420/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.8928 - loss: 0.3443 - precision_1: 0.9229 - recall_1: 0.858821/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.8922 - loss: 0.3465 - precision_1: 0.9225 - recall_1: 0.8583
Epoch 8: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 31s 2s/step - accuracy: 0.8916 - loss: 0.3484 - precision_1: 0.9222 - recall_1: 0.8579 - val_accuracy: 0.1296 - val_loss: 11.7399 - val_precision_1: 0.1296 - val_recall_1: 0.1296
Epoch 9/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 33s 2s/step - accuracy: 0.9688 - loss: 0.1850 - precision_1: 0.9688 - recall_1: 0.9688 2/21 ━━━━━━━━━━━━━━━━━━━━ 27s 1s/step - accuracy: 0.9531 - loss: 0.2107 - precision_1: 0.9682 - recall_1: 0.9531 3/21 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - accuracy: 0.9479 - loss: 0.2246 - precision_1: 0.9643 - recall_1: 0.9410 4/21 ━━━━━━━━━━━━━━━━━━━━ 25s 2s/step - accuracy: 0.9434 - loss: 0.2334 - precision_1: 0.9609 - recall_1: 0.9303 5/21 ━━━━━━━━━━━━━━━━━━━━ 24s 2s/step - accuracy: 0.9409 - loss: 0.2370 - precision_1: 0.9594 - recall_1: 0.9243 6/21 ━━━━━━━━━━━━━━━━━━━━ 22s 2s/step - accuracy: 0.9343 - loss: 0.2514 - precision_1: 0.9534 - recall_1: 0.9161 7/21 ━━━━━━━━━━━━━━━━━━━━ 21s 2s/step - accuracy: 0.9309 - loss: 0.2586 - precision_1: 0.9500 - recall_1: 0.9115 8/21 ━━━━━━━━━━━━━━━━━━━━ 19s 2s/step - accuracy: 0.9283 - loss: 0.2622 - precision_1: 0.9480 - recall_1: 0.9084 9/21 ━━━━━━━━━━━━━━━━━━━━ 22s 2s/step - accuracy: 0.9266 - loss: 0.2630 - precision_1: 0.9473 - recall_1: 0.906610/21 ━━━━━━━━━━━━━━━━━━━━ 20s 2s/step - accuracy: 0.9255 - loss: 0.2627 - precision_1: 0.9466 - recall_1: 0.905611/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.9251 - loss: 0.2614 - precision_1: 0.9464 - recall_1: 0.905412/21 ━━━━━━━━━━━━━━━━━━━━ 16s 2s/step - accuracy: 0.9239 - loss: 0.2614 - precision_1: 0.9456 - recall_1: 0.904413/21 ━━━━━━━━━━━━━━━━━━━━ 13s 2s/step - accuracy: 0.9226 - loss: 0.2635 - precision_1: 0.9445 - recall_1: 0.903214/21 ━━━━━━━━━━━━━━━━━━━━ 11s 2s/step - accuracy: 0.9208 - loss: 0.2677 - precision_1: 0.9428 - recall_1: 0.901415/21 ━━━━━━━━━━━━━━━━━━━━ 9s 2s/step - accuracy: 0.9188 - loss: 0.2723 - precision_1: 0.9411 - recall_1: 0.8993 16/21 ━━━━━━━━━━━━━━━━━━━━ 8s 2s/step - accuracy: 0.9169 - loss: 0.2769 - precision_1: 0.9397 - recall_1: 0.897217/21 ━━━━━━━━━━━━━━━━━━━━ 6s 2s/step - accuracy: 0.9151 - loss: 0.2820 - precision_1: 0.9383 - recall_1: 0.895118/21 ━━━━━━━━━━━━━━━━━━━━ 4s 2s/step - accuracy: 0.9137 - loss: 0.2862 - precision_1: 0.9373 - recall_1: 0.893119/21 ━━━━━━━━━━━━━━━━━━━━ 3s 2s/step - accuracy: 0.9126 - loss: 0.2895 - precision_1: 0.9365 - recall_1: 0.891620/21 ━━━━━━━━━━━━━━━━━━━━ 1s 2s/step - accuracy: 0.9117 - loss: 0.2923 - precision_1: 0.9360 - recall_1: 0.890321/21 ━━━━━━━━━━━━━━━━━━━━ 0s 2s/step - accuracy: 0.9110 - loss: 0.2944 - precision_1: 0.9357 - recall_1: 0.8893
Epoch 9: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 34s 2s/step - accuracy: 0.9104 - loss: 0.2964 - precision_1: 0.9354 - recall_1: 0.8884 - val_accuracy: 0.3642 - val_loss: 4.3274 - val_precision_1: 0.3694 - val_recall_1: 0.3580
Epoch 10/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 26s 1s/step - accuracy: 0.9375 - loss: 0.2248 - precision_1: 0.9667 - recall_1: 0.9062 2/21 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - accuracy: 0.9531 - loss: 0.1942 - precision_1: 0.9751 - recall_1: 0.9219 3/21 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - accuracy: 0.9583 - loss: 0.1790 - precision_1: 0.9762 - recall_1: 0.9271 4/21 ━━━━━━━━━━━━━━━━━━━━ 24s 1s/step - accuracy: 0.9551 - loss: 0.1807 - precision_1: 0.9738 - recall_1: 0.9219 5/21 ━━━━━━━━━━━━━━━━━━━━ 22s 1s/step - accuracy: 0.9491 - loss: 0.1966 - precision_1: 0.9672 - recall_1: 0.9162 6/21 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - accuracy: 0.9437 - loss: 0.2131 - precision_1: 0.9608 - recall_1: 0.9111 7/21 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - accuracy: 0.9396 - loss: 0.2254 - precision_1: 0.9557 - recall_1: 0.9066 8/21 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - accuracy: 0.9369 - loss: 0.2340 - precision_1: 0.9525 - recall_1: 0.9036 9/21 ━━━━━━━━━━━━━━━━━━━━ 21s 2s/step - accuracy: 0.9346 - loss: 0.2415 - precision_1: 0.9497 - recall_1: 0.901210/21 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.9331 - loss: 0.2467 - precision_1: 0.9478 - recall_1: 0.899811/21 ━━━━━━━━━━━━━━━━━━━━ 16s 2s/step - accuracy: 0.9319 - loss: 0.2502 - precision_1: 0.9466 - recall_1: 0.898612/21 ━━━━━━━━━━━━━━━━━━━━ 14s 2s/step - accuracy: 0.9306 - loss: 0.2535 - precision_1: 0.9455 - recall_1: 0.897513/21 ━━━━━━━━━━━━━━━━━━━━ 12s 2s/step - accuracy: 0.9295 - loss: 0.2565 - precision_1: 0.9446 - recall_1: 0.896514/21 ━━━━━━━━━━━━━━━━━━━━ 11s 2s/step - accuracy: 0.9283 - loss: 0.2602 - precision_1: 0.9435 - recall_1: 0.895515/21 ━━━━━━━━━━━━━━━━━━━━ 9s 2s/step - accuracy: 0.9275 - loss: 0.2629 - precision_1: 0.9428 - recall_1: 0.8948 16/21 ━━━━━━━━━━━━━━━━━━━━ 7s 2s/step - accuracy: 0.9269 - loss: 0.2647 - precision_1: 0.9422 - recall_1: 0.894417/21 ━━━━━━━━━━━━━━━━━━━━ 6s 2s/step - accuracy: 0.9266 - loss: 0.2660 - precision_1: 0.9419 - recall_1: 0.894118/21 ━━━━━━━━━━━━━━━━━━━━ 4s 2s/step - accuracy: 0.9262 - loss: 0.2669 - precision_1: 0.9417 - recall_1: 0.893819/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.9260 - loss: 0.2677 - precision_1: 0.9415 - recall_1: 0.893720/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.9257 - loss: 0.2683 - precision_1: 0.9413 - recall_1: 0.893621/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.9252 - loss: 0.2692 - precision_1: 0.9409 - recall_1: 0.8932
Epoch 10: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 31s 1s/step - accuracy: 0.9248 - loss: 0.2700 - precision_1: 0.9406 - recall_1: 0.8929 - val_accuracy: 0.4444 - val_loss: 4.8501 - val_precision_1: 0.4472 - val_recall_1: 0.4444
Epoch 11/50
1/21 ━━━━━━━━━━━━━━━━━━━━ 25s 1s/step - accuracy: 0.9688 - loss: 0.0983 - precision_1: 0.9688 - recall_1: 0.9688 2/21 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - accuracy: 0.9688 - loss: 0.0990 - precision_1: 0.9764 - recall_1: 0.9688 3/21 ━━━━━━━━━━━━━━━━━━━━ 21s 1s/step - accuracy: 0.9618 - loss: 0.1312 - precision_1: 0.9703 - recall_1: 0.9618 4/21 ━━━━━━━━━━━━━━━━━━━━ 19s 1s/step - accuracy: 0.9557 - loss: 0.1568 - precision_1: 0.9638 - recall_1: 0.9538 5/21 ━━━━━━━━━━━━━━━━━━━━ 18s 1s/step - accuracy: 0.9533 - loss: 0.1695 - precision_1: 0.9609 - recall_1: 0.9505 6/21 ━━━━━━━━━━━━━━━━━━━━ 17s 1s/step - accuracy: 0.9516 - loss: 0.1760 - precision_1: 0.9603 - recall_1: 0.9484 7/21 ━━━━━━━━━━━━━━━━━━━━ 16s 1s/step - accuracy: 0.9508 - loss: 0.1787 - precision_1: 0.9602 - recall_1: 0.9474 8/21 ━━━━━━━━━━━━━━━━━━━━ 15s 1s/step - accuracy: 0.9497 - loss: 0.1808 - precision_1: 0.9601 - recall_1: 0.9452 9/21 ━━━━━━━━━━━━━━━━━━━━ 13s 1s/step - accuracy: 0.9468 - loss: 0.1940 - precision_1: 0.9577 - recall_1: 0.940510/21 ━━━━━━━━━━━━━━━━━━━━ 11s 1s/step - accuracy: 0.9444 - loss: 0.2042 - precision_1: 0.9560 - recall_1: 0.936811/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.9431 - loss: 0.2106 - precision_1: 0.9552 - recall_1: 0.934512/21 ━━━━━━━━━━━━━━━━━━━━ 12s 1s/step - accuracy: 0.9419 - loss: 0.2158 - precision_1: 0.9544 - recall_1: 0.932613/21 ━━━━━━━━━━━━━━━━━━━━ 10s 1s/step - accuracy: 0.9407 - loss: 0.2208 - precision_1: 0.9535 - recall_1: 0.930814/21 ━━━━━━━━━━━━━━━━━━━━ 9s 1s/step - accuracy: 0.9394 - loss: 0.2258 - precision_1: 0.9523 - recall_1: 0.9291 15/21 ━━━━━━━━━━━━━━━━━━━━ 7s 1s/step - accuracy: 0.9382 - loss: 0.2304 - precision_1: 0.9511 - recall_1: 0.927416/21 ━━━━━━━━━━━━━━━━━━━━ 6s 1s/step - accuracy: 0.9366 - loss: 0.2355 - precision_1: 0.9497 - recall_1: 0.925317/21 ━━━━━━━━━━━━━━━━━━━━ 5s 1s/step - accuracy: 0.9353 - loss: 0.2396 - precision_1: 0.9484 - recall_1: 0.923618/21 ━━━━━━━━━━━━━━━━━━━━ 3s 1s/step - accuracy: 0.9342 - loss: 0.2430 - precision_1: 0.9475 - recall_1: 0.922319/21 ━━━━━━━━━━━━━━━━━━━━ 2s 1s/step - accuracy: 0.9332 - loss: 0.2461 - precision_1: 0.9465 - recall_1: 0.921120/21 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step - accuracy: 0.9322 - loss: 0.2488 - precision_1: 0.9456 - recall_1: 0.920021/21 ━━━━━━━━━━━━━━━━━━━━ 0s 1s/step - accuracy: 0.9312 - loss: 0.2518 - precision_1: 0.9447 - recall_1: 0.9189
Epoch 11: val_loss did not improve from 1.45730
21/21 ━━━━━━━━━━━━━━━━━━━━ 28s 1s/step - accuracy: 0.9303 - loss: 0.2546 - precision_1: 0.9438 - recall_1: 0.9179 - val_accuracy: 0.3148 - val_loss: 4.6065 - val_precision_1: 0.3056 - val_recall_1: 0.2716
def plot_accuracy_loss(history):
"""
Plot the accuracy and the loss during the training of the CNN.
"""
fig = plt.figure(figsize= (10 ,5 ))
# Plot accuracy
plt.subplot(221 )
plt.plot(history.history['accuracy' ], 'bo--' , label = "acc" )
plt.plot(history.history['val_accuracy' ], 'ro--' , label = "val_acc" )
plt.title("train_acc vs val_acc" )
plt.ylabel("accuracy" )
plt.xlabel("epochs" )
plt.legend()
# Plot loss function
plt.subplot(222 )
plt.plot(history.history['loss' ],'bo--' , label = "loss" )
plt.plot(history.history['val_loss' ], 'ro--' , label = "val_loss" )
plt.title("train_loss vs val_loss" )
plt.ylabel("loss" )
plt.xlabel("epochs" )
plt.legend()
plt.show()
plot_accuracy_loss(history)
Evaluate the Model
best_model = save_model(mn_model, "best_mn_model.weights.h5" )
WARNING:absl:You are saving your model as an HDF5 file via `model.save()` or `keras.saving.save_model(model)`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')` or `keras.saving.save_model(model, 'my_model.keras')`.
# Load the model, including both architecture and weights
saved_model = load_model('best_mn_model.weights.h5' )
results = saved_model.evaluate(mn_test_images)
print (f"Test Loss: { results[0 ]:.4f} " )
print (f"Test Accuracy: { results[1 ]* 100 :.2f} %" )
print (f"Test Precision: { results[2 ]* 100 :.2f} %" )
WARNING:absl:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.
1/11 ━━━━━━━━━━━━━━━━━━━━ 18s 2s/step - accuracy: 0.4375 - loss: 1.7898 - precision_1: 0.4483 - recall_1: 0.4062 2/11 ━━━━━━━━━━━━━━━━━━━━ 2s 231ms/step - accuracy: 0.4609 - loss: 1.6893 - precision_1: 0.4927 - recall_1: 0.4297 3/11 ━━━━━━━━━━━━━━━━━━━━ 1s 245ms/step - accuracy: 0.4670 - loss: 1.6439 - precision_1: 0.5118 - recall_1: 0.4392 4/11 ━━━━━━━━━━━━━━━━━━━━ 1s 240ms/step - accuracy: 0.4694 - loss: 1.6255 - precision_1: 0.5193 - recall_1: 0.4427 5/11 ━━━━━━━━━━━━━━━━━━━━ 1s 241ms/step - accuracy: 0.4680 - loss: 1.6287 - precision_1: 0.5200 - recall_1: 0.4404 6/11 ━━━━━━━━━━━━━━━━━━━━ 1s 240ms/step - accuracy: 0.4664 - loss: 1.6397 - precision_1: 0.5194 - recall_1: 0.4365 7/11 ━━━━━━━━━━━━━━━━━━━━ 0s 239ms/step - accuracy: 0.4642 - loss: 1.6485 - precision_1: 0.5182 - recall_1: 0.4328 8/11 ━━━━━━━━━━━━━━━━━━━━ 0s 238ms/step - accuracy: 0.4604 - loss: 1.6587 - precision_1: 0.5147 - recall_1: 0.4280 9/11 ━━━━━━━━━━━━━━━━━━━━ 0s 238ms/step - accuracy: 0.4578 - loss: 1.6656 - precision_1: 0.5121 - recall_1: 0.424410/11 ━━━━━━━━━━━━━━━━━━━━ 0s 240ms/step - accuracy: 0.4561 - loss: 1.6709 - precision_1: 0.5107 - recall_1: 0.422011/11 ━━━━━━━━━━━━━━━━━━━━ 0s 238ms/step - accuracy: 0.4553 - loss: 1.6747 - precision_1: 0.5094 - recall_1: 0.419011/11 ━━━━━━━━━━━━━━━━━━━━ 4s 239ms/step - accuracy: 0.4546 - loss: 1.6778 - precision_1: 0.5083 - recall_1: 0.4166
Test Loss: 1.7124
Test Accuracy: 44.70 %
Test Precision: 49.64 %
Section 3: Conclusion
In this project, we explored two approaches for boat classification: a custom Convolutional Neural Network (CNN) and Transfer Learning with MobileNetV2. Here are the key takeaways:
Model Comparison :
The custom CNN (Model 1) was built from scratch for boat classification.
Transfer Learning with MobileNetV2 (Model 2) used a pre-trained model for feature extraction.
Model Performance :
Both models did not achieve accuracy above 80% when evaluating the test images.
Notably, Model 2 (MobileNetV2 with transfer learning) exhibited a significant gap between its training and test accuracy, indicating a potential issue with overfitting.
Challenges for Accuracy :
The inability to surpass the 80% accuracy threshold may be attributed to:
Class Imbalance: Variations in the number of examples across boat types.
Limited Data: A relatively small dataset, which may lead to overfitting.
Complex Task: Boat classification requires capturing nuanced features.
Recommendations :
Address class imbalance with techniques like data augmentation, oversampling, or class weights.
Consider collecting more labeled data, especially for minority classes.
Fine-tune model architectures and hyperparameters to reduce overfitting.
In conclusion, while both models fell short of achieving accuracy above 80%
, the more significant disparity in training and test accuracy observed in Model 2 indicates a potential overfitting issue. This project lays the groundwork for further refinement and optimization of boat classification models.