The code includes 3 main parts as below:
- Split the image
- Clean the images
- Learning and prediction
1. Split the images
This code will: 1. Upload the original (.h5) dataset, 2. Store the .h5 file, to 3 variables, X_train, X_test, and y_train. 2. Convert each image in X_train and X_test(6464) to 5, 1414 images. 3. Flatten the 560005 y_train to 28000. 4. Save 3 outputs including X_train (2800001414), X_test (7000014*14), and y_train (280000,)
Import libraries:
Open the original dataset from google drive:
Predefined functions:
In this section, we defined the required function for to split the images. The main steps are as below:
- Crop the image.
- List item Split the image based on the optimum digit width (dgt_width).
- Put the slices to a new dataset.
Tunning the digits width and visualizing the split process:
The following part is just to display the process of the splitting for digits width of 11, 12, and 13:
Finalizing the images:
Increasing the size of each image from 14x14, to 18x18
Converting to array type:
Save the new datasets:
Now we have three new datasets that we are going to save them as .npy files, in the allocated directory:
Validation:
In this section we test what we did in previouse section.
Loading datasets:
Display the images in the new dataset:
2. Cleaning the images:
In the last section we splited the images and created new dataset. But some images, beside the main digit in the image, include some small objects that we are going to detect and remove them in this part.
This code will import the X_train, and X_test, and do the cleaning as follow: 1. Upload the X_train (280000,14,14) and X_test (56000,14,14). 2. Do the blur and mask methods on each image in datasets. 3. Extract the number of objects in each image. Each image should include just one object. 4. Remove the small objects in multi object images. 5. Save the new dataset.
Import libraries
Loading datasets
The new datasets that generated in previous section, are loaded again to be manipulated!
Predefined functions:
Here we defined the functions to do the blur and mask on each image, and also the function to display the images.
Tunning the blur radiation:
In the following section the proper value for blur radiation tunned.
Multi-object detection:
In this part each image will be blured, then masked, and finally, labeled to provide the proper situation for object detection.
In the next step, multi object images will be analysed and objects with small size will be deleted.
Save the new dataset:
When the cleaning is done, we save the new dataset and then we can use it for training and learning process.
Validation phase:
This section is for a primary validation and visualizing the clean dataset. The main validation is done in training step.
Load the dataset:
Display the images:
In this section we will display and compare the result of cleaning process.
Building and optimizing a model
Import libraries
load the preprocessed datasets
building our model
2 convolution layers + pooling + 2 dense layers + 1 final dense layer
Evaluate the model with 5-fold cross-validation
The best model (with least validation_loss) will be saved, moreover, learning rate reduction was used
Ploting the learning curves of the model(s)
Setting up running
Here we can run everything as to test the architecture of our model as well as choosing hyperparameters
Saving the best model
based on best validation loss
Using our best model for predictions
Epoch 1/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.1247 - accuracy: 0.9613 - val_loss: 0.0394 - val_accuracy: 0.9873 Epoch 2/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0543 - accuracy: 0.9842 - val_loss: 0.0299 - val_accuracy: 0.9913 Epoch 3/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0407 - accuracy: 0.9879 - val_loss: 0.0260 - val_accuracy: 0.9923 Epoch 4/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0323 - accuracy: 0.9903 - val_loss: 0.0294 - val_accuracy: 0.9914 Epoch 5/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0291 - accuracy: 0.9914 - val_loss: 0.0221 - val_accuracy: 0.9937 Epoch 6/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0260 - accuracy: 0.9921 - val_loss: 0.0240 - val_accuracy: 0.9937 Epoch 7/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0235 - accuracy: 0.9929 - val_loss: 0.0266 - val_accuracy: 0.9931 Epoch 8/30 6988/7000 ============================>. - ETA: 0s - loss: 0.0224 - accuracy: 0.9934 Epoch 00008: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0224 - accuracy: 0.9934 - val_loss: 0.0227 - val_accuracy: 0.9935 Epoch 9/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0125 - accuracy: 0.9961 - val_loss: 0.0173 - val_accuracy: 0.9956 Epoch 10/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0101 - accuracy: 0.9968 - val_loss: 0.0181 - val_accuracy: 0.9954 Epoch 11/30 7000/7000 ============================== - 23s 3ms/step - loss: 0.0103 - accuracy: 0.9969 - val_loss: 0.0172 - val_accuracy: 0.9957 Epoch 12/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0091 - accuracy: 0.9973 - val_loss: 0.0164 - val_accuracy: 0.9959 Epoch 13/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0087 - accuracy: 0.9973 - val_loss: 0.0177 - val_accuracy: 0.9955 Epoch 14/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0084 - accuracy: 0.9975 - val_loss: 0.0172 - val_accuracy: 0.9958 Epoch 15/30 6995/7000 ============================>. - ETA: 0s - loss: 0.0078 - accuracy: 0.9977 Epoch 00015: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0078 - accuracy: 0.9977 - val_loss: 0.0197 - val_accuracy: 0.9956 Epoch 16/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0052 - accuracy: 0.9984 - val_loss: 0.0193 - val_accuracy: 0.9962 Epoch 17/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0042 - accuracy: 0.9986 - val_loss: 0.0180 - val_accuracy: 0.9965 Epoch 18/30 6984/7000 ============================>. - ETA: 0s - loss: 0.0039 - accuracy: 0.9988 Epoch 00018: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0039 - accuracy: 0.9988 - val_loss: 0.0195 - val_accuracy: 0.9965 Epoch 19/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0037 - accuracy: 0.9990 - val_loss: 0.0155 - val_accuracy: 0.9970 Epoch 20/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0027 - accuracy: 0.9991 - val_loss: 0.0164 - val_accuracy: 0.9968 Epoch 21/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0030 - accuracy: 0.9991 - val_loss: 0.0189 - val_accuracy: 0.9968 Epoch 22/30 6999/7000 ============================>. - ETA: 0s - loss: 0.0025 - accuracy: 0.9992 Epoch 00022: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0025 - accuracy: 0.9992 - val_loss: 0.0186 - val_accuracy: 0.9969 Epoch 23/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0023 - accuracy: 0.9992 - val_loss: 0.0177 - val_accuracy: 0.9968 Epoch 24/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0021 - accuracy: 0.9993 - val_loss: 0.0163 - val_accuracy: 0.9969 Epoch 25/30 6995/7000 ============================>. - ETA: 0s - loss: 0.0019 - accuracy: 0.9994 Epoch 00025: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0019 - accuracy: 0.9994 - val_loss: 0.0170 - val_accuracy: 0.9969 Epoch 26/30 7000/7000 ============================== - 23s 3ms/step - loss: 0.0019 - accuracy: 0.9995 - val_loss: 0.0169 - val_accuracy: 0.9969 Epoch 27/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0018 - accuracy: 0.9995 - val_loss: 0.0164 - val_accuracy: 0.9970 Epoch 28/30 6994/7000 ============================>. - ETA: 0s - loss: 0.0019 - accuracy: 0.9994 Epoch 00028: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0019 - accuracy: 0.9994 - val_loss: 0.0163 - val_accuracy: 0.9971 Epoch 29/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9996 - val_loss: 0.0175 - val_accuracy: 0.9971 Epoch 30/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0014 - accuracy: 0.9996 - val_loss: 0.0173 - val_accuracy: 0.9970
99.704 Epoch 1/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.1220 - accuracy: 0.9616 - val_loss: 0.0403 - val_accuracy: 0.9877 Epoch 2/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0552 - accuracy: 0.9836 - val_loss: 0.0302 - val_accuracy: 0.9905 Epoch 3/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0418 - accuracy: 0.9874 - val_loss: 0.0283 - val_accuracy: 0.9917 Epoch 4/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0347 - accuracy: 0.9896 - val_loss: 0.0286 - val_accuracy: 0.9919 Epoch 5/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0302 - accuracy: 0.9909 - val_loss: 0.0257 - val_accuracy: 0.9930 Epoch 6/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0255 - accuracy: 0.9921 - val_loss: 0.0289 - val_accuracy: 0.9926 Epoch 7/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0243 - accuracy: 0.9927 - val_loss: 0.0230 - val_accuracy: 0.9939 Epoch 8/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0233 - accuracy: 0.9932 - val_loss: 0.0257 - val_accuracy: 0.9937 Epoch 9/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0214 - accuracy: 0.9939 - val_loss: 0.0210 - val_accuracy: 0.9946 Epoch 10/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0194 - accuracy: 0.9942 - val_loss: 0.0218 - val_accuracy: 0.9947 Epoch 11/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0189 - accuracy: 0.9943 - val_loss: 0.0235 - val_accuracy: 0.9948 Epoch 12/30 6989/7000 ============================>. - ETA: 0s - loss: 0.0177 - accuracy: 0.9948 Epoch 00012: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0178 - accuracy: 0.9948 - val_loss: 0.0235 - val_accuracy: 0.9945 Epoch 13/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0098 - accuracy: 0.9969 - val_loss: 0.0167 - val_accuracy: 0.9962 Epoch 14/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0087 - accuracy: 0.9973 - val_loss: 0.0187 - val_accuracy: 0.9961 Epoch 15/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0079 - accuracy: 0.9976 - val_loss: 0.0183 - val_accuracy: 0.9963 Epoch 16/30 6991/7000 ============================>. - ETA: 0s - loss: 0.0073 - accuracy: 0.9978 Epoch 00016: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0073 - accuracy: 0.9978 - val_loss: 0.0225 - val_accuracy: 0.9959 Epoch 17/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0053 - accuracy: 0.9984 - val_loss: 0.0195 - val_accuracy: 0.9967 Epoch 18/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0046 - accuracy: 0.9986 - val_loss: 0.0203 - val_accuracy: 0.9962 Epoch 19/30 6982/7000 ============================>. - ETA: 0s - loss: 0.0044 - accuracy: 0.9987 Epoch 00019: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0044 - accuracy: 0.9987 - val_loss: 0.0182 - val_accuracy: 0.9968 Epoch 20/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0031 - accuracy: 0.9990 - val_loss: 0.0167 - val_accuracy: 0.9970 Epoch 21/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0026 - accuracy: 0.9992 - val_loss: 0.0181 - val_accuracy: 0.9969 Epoch 22/30 6989/7000 ============================>. - ETA: 0s - loss: 0.0023 - accuracy: 0.9993 Epoch 00022: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0023 - accuracy: 0.9993 - val_loss: 0.0188 - val_accuracy: 0.9969 Epoch 23/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0023 - accuracy: 0.9993 - val_loss: 0.0201 - val_accuracy: 0.9970 Epoch 24/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0023 - accuracy: 0.9992 - val_loss: 0.0188 - val_accuracy: 0.9970 Epoch 25/30 6990/7000 ============================>. - ETA: 0s - loss: 0.0020 - accuracy: 0.9994 Epoch 00025: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05. 7000/7000 ============================== - 23s 3ms/step - loss: 0.0020 - accuracy: 0.9994 - val_loss: 0.0187 - val_accuracy: 0.9970 Epoch 26/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0021 - accuracy: 0.9994 - val_loss: 0.0184 - val_accuracy: 0.9971 Epoch 27/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9994 - val_loss: 0.0194 - val_accuracy: 0.9971 Epoch 28/30 6988/7000 ============================>. - ETA: 0s - loss: 0.0017 - accuracy: 0.9995 Epoch 00028: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9995 - val_loss: 0.0194 - val_accuracy: 0.9970 Epoch 29/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0018 - accuracy: 0.9994 - val_loss: 0.0200 - val_accuracy: 0.9970 Epoch 30/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9995 - val_loss: 0.0197 - val_accuracy: 0.9970 99.700 Epoch 1/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.1237 - accuracy: 0.9621 - val_loss: 0.0470 - val_accuracy: 0.9860 Epoch 2/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0546 - accuracy: 0.9839 - val_loss: 0.0449 - val_accuracy: 0.9877 Epoch 3/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0420 - accuracy: 0.9875 - val_loss: 0.0255 - val_accuracy: 0.9923 Epoch 4/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0346 - accuracy: 0.9897 - val_loss: 0.0238 - val_accuracy: 0.9934 Epoch 5/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0300 - accuracy: 0.9910 - val_loss: 0.0346 - val_accuracy: 0.9912 Epoch 6/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0265 - accuracy: 0.9921 - val_loss: 0.0228 - val_accuracy: 0.9934 Epoch 7/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0237 - accuracy: 0.9930 - val_loss: 0.0289 - val_accuracy: 0.9927 Epoch 8/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0227 - accuracy: 0.9936 - val_loss: 0.0238 - val_accuracy: 0.9935 Epoch 9/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0209 - accuracy: 0.9937 - val_loss: 0.0225 - val_accuracy: 0.9944 Epoch 10/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0193 - accuracy: 0.9943 - val_loss: 0.0225 - val_accuracy: 0.9940 Epoch 11/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0179 - accuracy: 0.9947 - val_loss: 0.0207 - val_accuracy: 0.9943 Epoch 12/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0176 - accuracy: 0.9948 - val_loss: 0.0185 - val_accuracy: 0.9950 Epoch 13/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0161 - accuracy: 0.9953 - val_loss: 0.0202 - val_accuracy: 0.9950 Epoch 14/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0162 - accuracy: 0.9954 - val_loss: 0.0249 - val_accuracy: 0.9944 Epoch 15/30 6999/7000 ============================>. - ETA: 0s - loss: 0.0154 - accuracy: 0.9956 Epoch 00015: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0154 - accuracy: 0.9956 - val_loss: 0.0229 - val_accuracy: 0.9951 Epoch 16/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0092 - accuracy: 0.9972 - val_loss: 0.0177 - val_accuracy: 0.9960 Epoch 17/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0071 - accuracy: 0.9978 - val_loss: 0.0182 - val_accuracy: 0.9960 Epoch 18/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0073 - accuracy: 0.9980 - val_loss: 0.0194 - val_accuracy: 0.9956 Epoch 19/30 6990/7000 ============================>. - ETA: 0s - loss: 0.0067 - accuracy: 0.9981 Epoch 00019: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0067 - accuracy: 0.9981 - val_loss: 0.0221 - val_accuracy: 0.9956 Epoch 20/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0047 - accuracy: 0.9985 - val_loss: 0.0197 - val_accuracy: 0.9963 Epoch 21/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0040 - accuracy: 0.9988 - val_loss: 0.0169 - val_accuracy: 0.9965 Epoch 22/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0033 - accuracy: 0.9990 - val_loss: 0.0210 - val_accuracy: 0.9964 Epoch 23/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0039 - accuracy: 0.9989 - val_loss: 0.0182 - val_accuracy: 0.9967 Epoch 24/30 6992/7000 ============================>. - ETA: 0s - loss: 0.0035 - accuracy: 0.9990 Epoch 00024: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814. 7000/7000 ============================== - 23s 3ms/step - loss: 0.0035 - accuracy: 0.9990 - val_loss: 0.0193 - val_accuracy: 0.9966 Epoch 25/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0023 - accuracy: 0.9993 - val_loss: 0.0193 - val_accuracy: 0.9967 Epoch 26/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0025 - accuracy: 0.9992 - val_loss: 0.0199 - val_accuracy: 0.9965 Epoch 27/30 7000/7000 ============================== - ETA: 0s - loss: 0.0030 - accuracy: 0.9993 Epoch 00027: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0030 - accuracy: 0.9993 - val_loss: 0.0194 - val_accuracy: 0.9968 Epoch 28/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0019 - accuracy: 0.9994 - val_loss: 0.0210 - val_accuracy: 0.9967 Epoch 29/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0016 - accuracy: 0.9994 - val_loss: 0.0190 - val_accuracy: 0.9967 Epoch 30/30 6999/7000 ============================>. - ETA: 0s - loss: 0.0022 - accuracy: 0.9994 Epoch 00030: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0022 - accuracy: 0.9994 - val_loss: 0.0186 - val_accuracy: 0.9968 99.679 Epoch 1/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.1242 - accuracy: 0.9617 - val_loss: 0.0462 - val_accuracy: 0.9853 Epoch 2/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0532 - accuracy: 0.9841 - val_loss: 0.0348 - val_accuracy: 0.9899 Epoch 3/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0410 - accuracy: 0.9875 - val_loss: 0.0347 - val_accuracy: 0.9903 Epoch 4/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0343 - accuracy: 0.9894 - val_loss: 0.0277 - val_accuracy: 0.9922 Epoch 5/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0293 - accuracy: 0.9913 - val_loss: 0.0309 - val_accuracy: 0.9916 Epoch 6/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0266 - accuracy: 0.9922 - val_loss: 0.0262 - val_accuracy: 0.9923 Epoch 7/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0247 - accuracy: 0.9928 - val_loss: 0.0241 - val_accuracy: 0.9937 Epoch 8/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0222 - accuracy: 0.9934 - val_loss: 0.0250 - val_accuracy: 0.9932 Epoch 9/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0215 - accuracy: 0.9939 - val_loss: 0.0230 - val_accuracy: 0.9942 Epoch 10/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0206 - accuracy: 0.9942 - val_loss: 0.0249 - val_accuracy: 0.9933 Epoch 11/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0183 - accuracy: 0.9946 - val_loss: 0.0303 - val_accuracy: 0.9922 Epoch 12/30 6985/7000 ============================>. - ETA: 0s - loss: 0.0179 - accuracy: 0.9948 Epoch 00012: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0179 - accuracy: 0.9948 - val_loss: 0.0275 - val_accuracy: 0.9938 Epoch 13/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0102 - accuracy: 0.9970 - val_loss: 0.0183 - val_accuracy: 0.9958 Epoch 14/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0085 - accuracy: 0.9974 - val_loss: 0.0206 - val_accuracy: 0.9956 Epoch 15/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0084 - accuracy: 0.9976 - val_loss: 0.0196 - val_accuracy: 0.9958 Epoch 16/30 6987/7000 ============================>. - ETA: 0s - loss: 0.0075 - accuracy: 0.9977 Epoch 00016: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0075 - accuracy: 0.9977 - val_loss: 0.0207 - val_accuracy: 0.9957 Epoch 17/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0052 - accuracy: 0.9984 - val_loss: 0.0172 - val_accuracy: 0.9964 Epoch 18/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0045 - accuracy: 0.9986 - val_loss: 0.0153 - val_accuracy: 0.9966 Epoch 19/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0040 - accuracy: 0.9987 - val_loss: 0.0200 - val_accuracy: 0.9962 Epoch 20/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0041 - accuracy: 0.9988 - val_loss: 0.0194 - val_accuracy: 0.9965 Epoch 21/30 6998/7000 ============================>. - ETA: 0s - loss: 0.0034 - accuracy: 0.9990 Epoch 00021: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0034 - accuracy: 0.9990 - val_loss: 0.0188 - val_accuracy: 0.9964 Epoch 22/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0030 - accuracy: 0.9991 - val_loss: 0.0175 - val_accuracy: 0.9966 Epoch 23/30 7000/7000 ============================== - 23s 3ms/step - loss: 0.0029 - accuracy: 0.9991 - val_loss: 0.0185 - val_accuracy: 0.9966 Epoch 24/30 6986/7000 ============================>. - ETA: 0s - loss: 0.0024 - accuracy: 0.9992 Epoch 00024: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0024 - accuracy: 0.9992 - val_loss: 0.0164 - val_accuracy: 0.9969 Epoch 25/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0019 - accuracy: 0.9994 - val_loss: 0.0176 - val_accuracy: 0.9969 Epoch 26/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0020 - accuracy: 0.9995 - val_loss: 0.0189 - val_accuracy: 0.9968 Epoch 27/30 6997/7000 ============================>. - ETA: 0s - loss: 0.0019 - accuracy: 0.9993 Epoch 00027: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0019 - accuracy: 0.9993 - val_loss: 0.0173 - val_accuracy: 0.9970 Epoch 28/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9994 - val_loss: 0.0171 - val_accuracy: 0.9970 Epoch 29/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0018 - accuracy: 0.9995 - val_loss: 0.0165 - val_accuracy: 0.9972 Epoch 30/30 6983/7000 ============================>. - ETA: 0s - loss: 0.0016 - accuracy: 0.9995 Epoch 00030: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0016 - accuracy: 0.9995 - val_loss: 0.0172 - val_accuracy: 0.9971 99.707 Epoch 1/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.1187 - accuracy: 0.9635 - val_loss: 0.0407 - val_accuracy: 0.9872 Epoch 2/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0530 - accuracy: 0.9842 - val_loss: 0.0331 - val_accuracy: 0.9897 Epoch 3/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0405 - accuracy: 0.9877 - val_loss: 0.0309 - val_accuracy: 0.9906 Epoch 4/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0332 - accuracy: 0.9902 - val_loss: 0.0282 - val_accuracy: 0.9916 Epoch 5/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0308 - accuracy: 0.9910 - val_loss: 0.0221 - val_accuracy: 0.9936 Epoch 6/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0265 - accuracy: 0.9920 - val_loss: 0.0197 - val_accuracy: 0.9939 Epoch 7/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0249 - accuracy: 0.9925 - val_loss: 0.0198 - val_accuracy: 0.9946 Epoch 8/30 7000/7000 ============================== - 23s 3ms/step - loss: 0.0216 - accuracy: 0.9936 - val_loss: 0.0181 - val_accuracy: 0.9947 Epoch 9/30 7000/7000 ============================== - 22s 3ms/step - loss: 0.0203 - accuracy: 0.9941 - val_loss: 0.0221 - val_accuracy: 0.9942 Epoch 10/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0196 - accuracy: 0.9942 - val_loss: 0.0192 - val_accuracy: 0.9949 Epoch 11/30 6982/7000 ============================>. - ETA: 0s - loss: 0.0189 - accuracy: 0.9944 Epoch 00011: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0189 - accuracy: 0.9944 - val_loss: 0.0204 - val_accuracy: 0.9946 Epoch 12/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0106 - accuracy: 0.9968 - val_loss: 0.0148 - val_accuracy: 0.9962 Epoch 13/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0088 - accuracy: 0.9973 - val_loss: 0.0159 - val_accuracy: 0.9962 Epoch 14/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0085 - accuracy: 0.9975 - val_loss: 0.0163 - val_accuracy: 0.9962 Epoch 15/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0084 - accuracy: 0.9975 - val_loss: 0.0134 - val_accuracy: 0.9969 Epoch 16/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0075 - accuracy: 0.9979 - val_loss: 0.0165 - val_accuracy: 0.9965 Epoch 17/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0072 - accuracy: 0.9978 - val_loss: 0.0149 - val_accuracy: 0.9966 Epoch 18/30 6993/7000 ============================>. - ETA: 0s - loss: 0.0074 - accuracy: 0.9979 Epoch 00018: ReduceLROnPlateau reducing learning rate to 0.0002500000118743628. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0074 - accuracy: 0.9979 - val_loss: 0.0142 - val_accuracy: 0.9967 Epoch 19/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0044 - accuracy: 0.9986 - val_loss: 0.0140 - val_accuracy: 0.9970 Epoch 20/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0042 - accuracy: 0.9987 - val_loss: 0.0146 - val_accuracy: 0.9968 Epoch 21/30 6997/7000 ============================>. - ETA: 0s - loss: 0.0042 - accuracy: 0.9989 Epoch 00021: ReduceLROnPlateau reducing learning rate to 0.0001250000059371814. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0042 - accuracy: 0.9989 - val_loss: 0.0140 - val_accuracy: 0.9971 Epoch 22/30 7000/7000 ============================== - 23s 3ms/step - loss: 0.0030 - accuracy: 0.9991 - val_loss: 0.0134 - val_accuracy: 0.9971 Epoch 23/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0027 - accuracy: 0.9991 - val_loss: 0.0141 - val_accuracy: 0.9974 Epoch 24/30 6995/7000 ============================>. - ETA: 0s - loss: 0.0024 - accuracy: 0.9993 Epoch 00024: ReduceLROnPlateau reducing learning rate to 6.25000029685907e-05. 7000/7000 ============================== - 22s 3ms/step - loss: 0.0024 - accuracy: 0.9993 - val_loss: 0.0139 - val_accuracy: 0.9973 Epoch 25/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0025 - accuracy: 0.9993 - val_loss: 0.0136 - val_accuracy: 0.9973 Epoch 26/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0021 - accuracy: 0.9994 - val_loss: 0.0138 - val_accuracy: 0.9973 Epoch 27/30 6983/7000 ============================>. - ETA: 0s - loss: 0.0019 - accuracy: 0.9995 Epoch 00027: ReduceLROnPlateau reducing learning rate to 3.125000148429535e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0020 - accuracy: 0.9995 - val_loss: 0.0152 - val_accuracy: 0.9972 Epoch 28/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0018 - accuracy: 0.9995 - val_loss: 0.0142 - val_accuracy: 0.9974 Epoch 29/30 7000/7000 ============================== - 21s 3ms/step - loss: 0.0017 - accuracy: 0.9995 - val_loss: 0.0149 - val_accuracy: 0.9973 Epoch 30/30 6998/7000 ============================>. - ETA: 0s - loss: 0.0016 - accuracy: 0.9995 Epoch 00030: ReduceLROnPlateau reducing learning rate to 1.5625000742147677e-05. 7000/7000 ============================== - 21s 3ms/step - loss: 0.0016 - accuracy: 0.9995 - val_loss: 0.0141 - val_accuracy: 0.9973