Bird
Raised Fist0
TensorFlowml~8 mins

CNN architecture for image classification in TensorFlow - Model Metrics & Evaluation

Choose your learning style10 modes available
Metrics & Evaluation - CNN architecture for image classification
Which metric matters for CNN image classification and WHY

For image classification using CNNs, accuracy is often the first metric to check. It tells us how many images were correctly labeled out of all images.

However, if classes are uneven (some classes have many images, others few), accuracy can be misleading. Then, precision, recall, and F1 score per class become important to understand how well the model detects each category.

For example, if the model misses many images of a rare class, recall for that class will be low, even if overall accuracy is high.

Confusion matrix example

Suppose we have 3 classes: Cat, Dog, and Bird. Here is a confusion matrix from a CNN model:

      | Predicted Cat | Predicted Dog | Predicted Bird |
      |---------------|---------------|----------------|
      | Cat: 50       |  2            | 3              |
      | Dog: 4        | 45            | 1              |
      | Bird: 2       | 3             | 40             |
    

From this, we can calculate metrics like precision and recall for each class.

Precision vs Recall tradeoff with examples

In image classification, sometimes we want to be very sure when the model says an image is a certain class (high precision). For example, if the model labels an image as a rare animal, we want to avoid mistakes.

Other times, we want to catch as many images of a class as possible (high recall). For example, in medical image classification, missing a disease image is worse than a false alarm.

Adjusting the model or decision threshold can increase precision but lower recall, or vice versa. Understanding this helps choose the right balance for your task.

What good vs bad metric values look like

Good CNN model for image classification:

  • Accuracy above 90% on balanced test data
  • Precision and recall above 85% for all major classes
  • Confusion matrix shows most predictions on the diagonal (correct class)

Bad CNN model:

  • Accuracy below 70%
  • Precision or recall very low (<50%) for some classes
  • Confusion matrix shows many off-diagonal errors (wrong predictions)
Common pitfalls in CNN metrics
  • Accuracy paradox: High accuracy but poor performance on rare classes.
  • Data leakage: Test images accidentally appear in training, inflating metrics.
  • Overfitting: Very high training accuracy but low test accuracy.
  • Ignoring class imbalance: Metrics averaged over all classes can hide poor results on small classes.
Self-check question

Your CNN model for image classification has 98% accuracy but only 12% recall on a rare class. Is it good for production?

Answer: No. The model misses most images of the rare class (low recall), which can be critical depending on the use case. High overall accuracy hides this problem. You should improve recall for that class before production.

Key Result
Accuracy is key for overall performance, but precision and recall per class reveal true model quality in image classification.

Practice

(1/5)
1. What is the main role of the Conv2D layer in a CNN for image classification?
easy
A. To reduce the size of the image by pooling
B. To decide the final class of the image
C. To flatten the image into a 1D array
D. To detect patterns like edges and shapes in small parts of the image

Solution

  1. Step 1: Understand the function of Conv2D

    The Conv2D layer scans small parts of the image to find patterns such as edges and textures.
  2. Step 2: Compare with other layers

    Pooling layers reduce size, flatten layers reshape data, and dense layers classify. Conv2D focuses on pattern detection.
  3. Final Answer:

    To detect patterns like edges and shapes in small parts of the image -> Option D
  4. Quick Check:

    Conv2D = pattern detection [OK]
Hint: Conv2D finds patterns; pooling shrinks images [OK]
Common Mistakes:
  • Confusing Conv2D with pooling layers
  • Thinking Conv2D flattens the image
  • Believing Conv2D decides the final class
2. Which of the following is the correct way to add a MaxPooling2D layer in TensorFlow Keras?
easy
A. tf.keras.layers.MaxPooling2D(pool_size=(2, 2))
B. tf.keras.layers.MaxPooling(pool=(2, 2))
C. tf.keras.layers.MaxPool2D(size=(2, 2))
D. tf.keras.layers.Pooling2D(pool_size=2)

Solution

  1. Step 1: Recall correct TensorFlow layer syntax

    The correct class name is MaxPooling2D and it uses the argument pool_size to set the window size.
  2. Step 2: Check each option

    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)) uses correct class and argument. Others have wrong class names or argument names.
  3. Final Answer:

    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)) -> Option A
  4. Quick Check:

    MaxPooling2D with pool_size=(2,2) is correct [OK]
Hint: MaxPooling2D uses pool_size, not pool or size [OK]
Common Mistakes:
  • Using wrong layer class names
  • Using incorrect argument names like pool or size
  • Omitting parentheses or tuple for pool_size
3. What will be the output shape after applying this CNN block on an input image of shape (64, 64, 3)?
model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(64,64,3)),
  tf.keras.layers.MaxPooling2D(pool_size=(2,2))
])
output_shape = model.output_shape
medium
A. (None, 32, 32, 32)
B. (None, 62, 62, 32)
C. (None, 31, 31, 32)
D. (None, 64, 64, 32)

Solution

  1. Step 1: Calculate Conv2D output shape

    Conv2D with kernel size 3x3 and default padding='valid' reduces each spatial dimension by 2: 64 - 3 + 1 = 62, so output shape is (62, 62, 32).
  2. Step 2: Calculate MaxPooling2D output shape

    MaxPooling2D with pool size 2x2 halves each spatial dimension: 62 / 2 = 31, so output shape is (31, 31, 32).
  3. Final Answer:

    (None, 31, 31, 32) -> Option C
  4. Quick Check:

    Conv2D valid padding reduces size; pooling halves it [OK]
Hint: Conv2D valid padding shrinks; pooling halves size [OK]
Common Mistakes:
  • Assuming padding='same' by default
  • Forgetting spatial dimension reduction by Conv2D
  • Misapplying pooling size effect
4. Identify the error in this CNN model code snippet:
model = tf.keras.Sequential([
  tf.keras.layers.Conv2D(64, (3,3), activation='relu', input_shape=(28,28,1)),
  tf.keras.layers.MaxPooling2D(pool_size=2),
  tf.keras.layers.Dense(10, activation='softmax')
])
medium
A. Missing Flatten layer before Dense
B. Wrong input_shape format
C. MaxPooling2D pool_size should be a tuple
D. Dense layer should have no activation

Solution

  1. Step 1: Check layer order and compatibility

    Conv2D and MaxPooling2D output 3D tensors, but Dense expects 1D input.
  2. Step 2: Identify missing layer

    A Flatten layer is needed to convert 3D output to 1D before Dense.
  3. Final Answer:

    Missing Flatten layer before Dense -> Option A
  4. Quick Check:

    Dense needs 1D input; add Flatten [OK]
Hint: Add Flatten before Dense after Conv/Pooling [OK]
Common Mistakes:
  • Skipping Flatten layer before Dense
  • Assuming Dense accepts 3D input
  • Confusing pool_size tuple requirement
5. You want to build a CNN to classify 100x100 RGB images into 5 classes. Which architecture below is best suited for this task?
hard
A. Dense(128, relu) -> Dense(64, relu) -> Dense(5, softmax)
B. Conv2D(16, (3,3)) -> MaxPooling2D(2,2) -> Conv2D(32, (3,3)) -> MaxPooling2D(2,2) -> Flatten -> Dense(5, softmax)
C. Conv2D(64, (5,5), padding='same') -> Flatten -> Dense(5, softmax)
D. Conv2D(32, (3,3)) -> Conv2D(32, (3,3)) -> Dense(5, softmax)

Solution

  1. Step 1: Analyze each architecture's suitability

    Conv2D(16, (3,3)) -> MaxPooling2D(2,2) -> Conv2D(32, (3,3)) -> MaxPooling2D(2,2) -> Flatten -> Dense(5, softmax) uses multiple Conv2D and MaxPooling layers to extract features and reduce size, then flattens before classification. This is a standard CNN design.
  2. Step 2: Identify issues in other options

    Dense(128, relu) -> Dense(64, relu) -> Dense(5, softmax) uses only Dense layers, ignoring spatial info. Conv2D(64, (5,5), padding='same') -> Flatten -> Dense(5, softmax) lacks pooling, risking large feature maps. Conv2D(32, (3,3)) -> Conv2D(32, (3,3)) -> Dense(5, softmax) misses Flatten and pooling, causing shape errors.
  3. Final Answer:

    Conv2D(16, (3,3)) -> MaxPooling2D(2,2) -> Conv2D(32, (3,3)) -> MaxPooling2D(2,2) -> Flatten -> Dense(5, softmax) -> Option B
  4. Quick Check:

    Multiple Conv+Pooling layers + Flatten + Dense = best CNN [OK]
Hint: Use Conv + Pooling layers before Flatten and Dense [OK]
Common Mistakes:
  • Using only Dense layers for images
  • Skipping pooling layers
  • Missing Flatten before Dense
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard