## 4 Results  
Table 6 summarises the information of the datasets, tuned hyperparameters, and the performance metrics that defined our fine-tuned VGG-16 network for the prediction of maize common rust disease severities. Figures 8 and 9 show the plots of training metrics against validation metrics. Figure 8 shows the loss metrics plots, and Figure 9 shows the accuracy metrics plots. The main cause of poor prediction performance in machine learning is either overfitting or underfitting the data [38]. Underfitting means that the model is too simple and fails to fit (learn) the training data [38]. Overfitting means that the model is so complex that it memorizes the training data and fails to generalize from test/validation data that it has not seen before [38]. Therefore, it can be seen in Figures 8 and 9 that the proposed model did not underfit nor overfit the training data, because both plots show that they are generalized well from the validation data. The model also achieved a high testing accuracy of 89% when it was tested \begin{table}
\begin{tabular}{c c c c} \hline \hline
**Layer Name** & **Type** & **Number of Filters** &
\begin{tabular}{c} **Number of** \\ **Parameters** \\ \end{tabular} \\ \hline Input & Input layer & - & 0 \\ Block 1\_Conv2D\_1 & Convolutional & 64 & 1792 \\ Block 1\_Conv2D\_2 & Convolutional & 64 & 36,928 \\ Block 1\_MaxPooling2D & Max Pooling & - & 0 \\ Block 2\_Conv2D\_1 & Convolutional & 128 & 73,856 \\ Block 2\_Conv2D\_2 & Convolutional & 128 & 147,584 \\ Block 2\_MaxPooling2D & Max Pooling & - & 0 \\ Block 3\_Conv2D\_1 & Convolutional & 256 & 295,168 \\ Block 3\_Conv2D\_2 & Convolutional & 256 & 590,080 \\ Block 3\_Conv2D\_3 & Convolutional & 256 & 590,080 \\ Block 3\_MaxPooling2D & Max Pooling & - & 0 \\ Block 4\_Conv2D\_1 & Convolutional & 512 & 1,180,160 \\ Block 4\_Conv2D\_2 & Convolutional & 512 & 2,359,808 \\ Block 4\_Conv2D\_3 & Convolutional & 512 & 2,359,808 \\ Block 4\_MaxPooling2D & Max Pooling & - & 0 \\ Block 5\_Conv2D\_1 & Convolutional & 512 & 2,359,808 \\ Block 5\_Conv2D\_2 & Convolutional & 512 & 2,359,808 \\ Block 5\_Conv2D\_3 & Convolutional & 512 & 2,359,808 \\ Block 5\_MaxPooling2D & Max Pooling & - & 0 \\ Flatten & Layer & - & 0 \\ Dense (32 nodes) & Layer & - & 802,848 \\ Dropout (0.2) & Layer & - & 0 \\ Dense\_1 (4 nodes) & Layer & - & 132 \\ \hline \hline \end{tabular}
\end{table} 
Table 5: Model summary for a fine-tuned VGG-16 network to predict maize common rust disease severities. against 100 images, with 25 images in each class. It can also be seen in Figure 8 that the validation loss converged to 0.2 without oscillations, which was positive, and indicated that a learning rate of 0.0001 that we set in the Adam optimizer was ideal. The testing dataset were a collection of camera images that were also assigned to their severity classes using the approach proposed in this study. A total of 100 images were \begin{table}
\begin{tabular}{c c} \hline \hline
**Total Training Images.** & **1600** \\ \hline Total Validation Images. & 200 \\ Total images from the collected dataset. & 100 \\ Batch size. & 32 \\ Optimizer Type and Learning rate. & Adam \\  & (Ir = 0.0001) \\ Dropout. & 20\% of nodes in the first Dense layer of FC. \\ Training Accuracy on the PlantVillage dataset. & 99.21\% \\ Validation Accuracy on the PlantVillage & 95.63\% \\ \hline Test Accuracy on the collected data set. & 89\% \\ Training Epochs. & 15 \\ Training Loss. & 0.02 \\ Validation Loss. & 0.2 \\ \hline \hline \end{tabular}
\end{table} 
Table 6: Summary of model hyper parameter tuning and performance metrics. Figure 8: Training loss against validation loss plots. Figure 9: Training accuracy against validation accuracy plots. used for testing. Out of the chosen 100 images for testing, each class contained 25 images. Figure 10 shows the number of correct classifications that the VGG-16 was able to make in each class. Equation (11) shows how the testing accuracy of 89% was achieved by the VGG-16 network.