## 3 Results
### Model Evaluation and Testing  
Once training was conducted, we plotted the metrics to observe the model's performance. A steadily decreasing training loss and increasing training accuracy indicate that the model was effectively learning the patterns present in the training data. If the validation loss also decreased and validation accuracy increased in a similar manner, it would indicate that the model is generalizing well to unseen data, which is a sign of a robust and effective model. However, if the training loss continues to decrease while the validation loss starts to increase, this is a clear indication of overfitting. Overfitting occurs when the model learns the noise and details in the training data to such an extent that it negatively impacts its  
Figure 2: Model’s defined architecture to be used during the training phase. performance on new data. This is often observed when the training accuracy is significantly higher than the validation accuracy. The model performs well on the training set but fails to generalize to the validation set. Conversely, if both the training and validation losses remain high and the accuracies are low, the model is likely underfitting. Underfitting occurs when the model is too simple to capture the underlying patterns in the data. This can happen if the model lacks the necessary complexity, such as insufficient layers or neurons, or if it is not trained for enough epochs. In this scenario, the model fails to perform well on both the training and validation sets. The accuracy and loss plots are also crucial for determining model convergence. Model convergence is indicated when the loss values stabilize and no longer improve significantly over successive epochs. This helps in deciding when to stop training. If the plots show a flat trend in loss and accuracy, it suggests that the model has reached its optimal performance given the current training setup. This information is useful for implementing early stopping to avoid unnecessary training time and computational resources. Figure 3 displays how the model performed during training. The analysis can be either achieved by (a) accuracy or (b) loss. By looking at the accuracy, we can see that the model performs better on training data, which is expected since if data were used in the training process, the accuracy ends with a high value, which may indicate overfitting, but the validation accuracy is high, which indicates the model performs well on unseen data. There are minor spikes in the training phase, and they indicate the model was not well structured. What matters in these cases is that the training does not stop right at that moment, since the model may not be able to perform well. However, the model adjusted by the end and finished with high accuracy and reduced loss. Saving a trained model for later use is an essential step in the machine learning workflow. In Keras, this can be achieved by saving the model in the.h5 format using the model.save('model.h5') method. The.h5 file format is an HDF5 (Hierarchical Data Format version 5) file, which is a versatile data model that can represent complex data objects and a variety of metadata. HDF5 is widely used for storing large amounts of data and is particularly suitable for handling large neural network models. It allows for efficient storage and retrieval of the complete model architecture, weights, and optimizer state, ensuring that the model can be reloaded and used later without any loss of information or functionality. The process of saving a model involves serializing the architecture, weights, and optimizer information into a single.h5 file (see model details in Table 5). This file can then be loaded later to reconstruct the exact state of the model at the time of saving. This is particularly useful for deploying models in production environments, sharing models with others, or resuming training at a later point.