0
0
Computer-visionHow-ToBeginner · 4 min read

How to Use CIFAR10 Dataset for Image Classification in Computer Vision

Use the CIFAR10 dataset by loading it with a library like TensorFlow or PyTorch, preprocess the images by normalizing pixel values, then train a classification model such as a convolutional neural network (CNN) to predict the image classes. Finally, evaluate the model's accuracy on test data to measure performance.
📐

Syntax

To use CIFAR10 for classification, follow these steps:

  • Load dataset: Use built-in functions to download and load CIFAR10 images and labels.
  • Preprocess data: Normalize pixel values to a 0-1 range for better training.
  • Build model: Create a neural network, typically a CNN, to learn image features.
  • Train model: Fit the model on training data with labels.
  • Evaluate: Test the model on unseen data to check accuracy.
python
import tensorflow as tf

# Load CIFAR10 dataset
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()

# Normalize pixel values
train_images = train_images / 255.0
test_images = test_images / 255.0

# Build a simple CNN model
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(32, 32, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Train the model
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

# Evaluate the model
loss, accuracy = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {accuracy:.4f}')
Output
Epoch 1/10 1563/1563 [==============================] - 15s 9ms/step - loss: 1.4962 - accuracy: 0.4582 - val_loss: 1.2437 - val_accuracy: 0.5553 Epoch 2/10 1563/1563 [==============================] - 14s 9ms/step - loss: 1.1329 - accuracy: 0.6005 - val_loss: 1.0863 - val_accuracy: 0.6187 Epoch 3/10 1563/1563 [==============================] - 14s 9ms/step - loss: 1.0007 - accuracy: 0.6483 - val_loss: 1.0347 - val_accuracy: 0.6357 Epoch 4/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.9047 - accuracy: 0.6833 - val_loss: 0.9787 - val_accuracy: 0.6537 Epoch 5/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.8296 - accuracy: 0.7093 - val_loss: 0.9493 - val_accuracy: 0.6666 Epoch 6/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.7657 - accuracy: 0.7313 - val_loss: 0.9333 - val_accuracy: 0.6729 Epoch 7/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.7097 - accuracy: 0.7511 - val_loss: 0.9297 - val_accuracy: 0.6764 Epoch 8/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.6597 - accuracy: 0.7689 - val_loss: 0.9337 - val_accuracy: 0.6783 Epoch 9/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.6099 - accuracy: 0.7858 - val_loss: 0.9499 - val_accuracy: 0.6783 Epoch 10/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.5657 - accuracy: 0.8013 - val_loss: 0.9609 - val_accuracy: 0.6788 313/313 [==============================] - 1s 3ms/step - loss: 0.9609 - accuracy: 0.6788 Test accuracy: 0.6788
💻

Example

This example shows how to load CIFAR10, normalize images, build a simple convolutional neural network, train it for 10 epochs, and evaluate accuracy on test data.

python
import tensorflow as tf

# Load CIFAR10 dataset
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()

# Normalize pixel values to [0,1]
train_images = train_images / 255.0
test_images = test_images / 255.0

# Define a simple CNN model
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(32, 32, 3)),
    tf.keras.layers.MaxPooling2D(2, 2),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(10, activation='softmax')
])

# Compile the model
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Train the model
model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))

# Evaluate the model
loss, accuracy = model.evaluate(test_images, test_labels)
print(f'Test accuracy: {accuracy:.4f}')
Output
Epoch 1/10 1563/1563 [==============================] - 15s 9ms/step - loss: 1.4962 - accuracy: 0.4582 - val_loss: 1.2437 - val_accuracy: 0.5553 Epoch 2/10 1563/1563 [==============================] - 14s 9ms/step - loss: 1.1329 - accuracy: 0.6005 - val_loss: 1.0863 - val_accuracy: 0.6187 Epoch 3/10 1563/1563 [==============================] - 14s 9ms/step - loss: 1.0007 - accuracy: 0.6483 - val_loss: 1.0347 - val_accuracy: 0.6357 Epoch 4/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.9047 - accuracy: 0.6833 - val_loss: 0.9787 - val_accuracy: 0.6537 Epoch 5/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.8296 - accuracy: 0.7093 - val_loss: 0.9493 - val_accuracy: 0.6666 Epoch 6/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.7657 - accuracy: 0.7313 - val_loss: 0.9333 - val_accuracy: 0.6729 Epoch 7/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.7097 - accuracy: 0.7511 - val_loss: 0.9297 - val_accuracy: 0.6764 Epoch 8/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.6597 - accuracy: 0.7689 - val_loss: 0.9337 - val_accuracy: 0.6783 Epoch 9/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.6099 - accuracy: 0.7858 - val_loss: 0.9499 - val_accuracy: 0.6783 Epoch 10/10 1563/1563 [==============================] - 14s 9ms/step - loss: 0.5657 - accuracy: 0.8013 - val_loss: 0.9609 - val_accuracy: 0.6788 313/313 [==============================] - 1s 3ms/step - loss: 0.9609 - accuracy: 0.6788 Test accuracy: 0.6788
⚠️

Common Pitfalls

Common mistakes when using CIFAR10 for classification include:

  • Not normalizing pixel values, which slows training and reduces accuracy.
  • Using a model that is too simple or too complex for CIFAR10's small images.
  • Confusing label shapes (CIFAR10 labels are often 2D arrays; use sparse_categorical_crossentropy loss with integer labels).
  • Not splitting data properly or mixing training and test sets.

Always preprocess data correctly and choose a suitable model architecture.

python
import tensorflow as tf

# Wrong: Not normalizing images
(train_images, train_labels), (test_images, test_labels) = tf.keras.datasets.cifar10.load_data()

# Model expects normalized input, but here images are raw 0-255 values

model = tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(32, 32, 3)),
    tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# This will train but with poor accuracy
model.fit(train_images, train_labels, epochs=5)

# Right: Normalize images
train_images = train_images / 255.0

model.fit(train_images, train_labels, epochs=5)
📊

Quick Reference

Key steps to use CIFAR10 for classification:

  • Load dataset with tf.keras.datasets.cifar10.load_data().
  • Normalize images by dividing pixel values by 255.
  • Build a CNN model with convolution, pooling, flatten, and dense layers.
  • Compile model with adam optimizer and sparse_categorical_crossentropy loss.
  • Train model with model.fit() and evaluate with model.evaluate().

Key Takeaways

Always normalize CIFAR10 images to improve model training and accuracy.
Use a convolutional neural network (CNN) for effective image classification on CIFAR10.
Compile the model with 'sparse_categorical_crossentropy' loss for integer labels.
Evaluate your model on test data to check real-world performance.
Avoid mixing training and test data to ensure valid evaluation.