I do not understand the prediction result of the CNN model I have used the following model:

Layer (type)                 Output Shape              Param #   
=================================================================
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
dense_2 (Dense)              (None, 3)                 12291     
=================================================================
Total params: 134,272,835
Trainable params: 12,291
Non-trainable params: 134,260,544


I have used ImageDataGenerator to generate batches and fit_generator() to train the model and it gives me good results. After that I used predict_generator() to get the prediction but I do not understand the result of the prediction.

array([[9.9999332e-01, 4.8690736e-06, 1.7893352e-06],
       [6.9793887e-02, 9.2653686e-01, 3.6693658e-03],
       [9.9999678e-01, 1.7507674e-06, 1.4884581e-06],
       [3.7891464e-04, 3.6775662e-05, 9.9958426e-01]], dtype=float32)


Could you please explain what the results mean?

Also, I would like to know how can I display each image in the tested data and its predicted label?
Without knowing more about the training data it's impossible to explain the prediction results properly. One way to interpret the results is that the model is producing a probability distribution, over 3 classes, for each image you feed. This would be the case if your training data consists of one-hot vectors where exactly one element is 1 and the other two are 0.

The output of the model is your final layer after the final activation function is applied, so the prediction has the same shape of your dense_2 final layer. The None in the first dimension indicates that the size of that dimension at runtime is dynamic, and in this case the first dimension represents batch elements. Hence the output is an array of shape [batch_size, 3] and you have one 3-element vector for each of the 4 example images fed into your network.

In your comment you indicated that your final activation is the softmax function, which means that each 3-element vector can represent a probability distribution over 3 possible outcomes (notice that each vector sums to one: by definition softmax normalizes its output).

If you're trying to predict classes for each image, which appears to be the case, the predicted class label integer would be the index of the 3-element vector that has the highest probability. Typically these integers represent something semantically relevant to your application.

With a softmax output you still have to apply a decision rule on the output to actually retrieve the predicted class. For example, if your possible classes are ["dog", "cat", "mouse"] and your example image outputs a vector [.06, .9, .04], then you could choose the "predicted class" to be "cat". Or you could incorporate the predicted probability distribution into a more elaborate probabilistic model.