Bird
Raised Fist0
TensorFlowml~20 mins

Data augmentation for images in TensorFlow - ML Experiment: Train & Evaluate

Choose your learning style10 modes available
Experiment - Data augmentation for images
Problem:You have a small image dataset to train a classifier. The model fits training data well with 98% accuracy but validation accuracy is only 70%. This shows overfitting due to limited data variety.
Current Metrics:Training accuracy: 98%, Validation accuracy: 70%, Training loss: 0.05, Validation loss: 0.85
Issue:The model overfits because it memorizes training images but cannot generalize to new images. The dataset is too small and lacks diversity.
Your Task
Use data augmentation to increase image variety and reduce overfitting. Target validation accuracy >85% while keeping training accuracy below 92%.
Do not change the model architecture.
Do not add more original images.
Only modify the data pipeline to include augmentation.
Hint 1
Hint 2
Hint 3
Solution
TensorFlow
import tensorflow as tf
from tensorflow.keras import layers, models

# Load example dataset
(train_images, train_labels), (val_images, val_labels) = tf.keras.datasets.cifar10.load_data()

# Normalize images
train_images = train_images.astype('float32') / 255.0
val_images = val_images.astype('float32') / 255.0

# Define data augmentation pipeline
data_augmentation = tf.keras.Sequential([
    layers.RandomFlip('horizontal'),
    layers.RandomRotation(0.1),
    layers.RandomZoom(0.1),
    layers.RandomTranslation(0.1, 0.1)
])

# Build model (simple CNN)
model = models.Sequential([
    layers.Input(shape=(32, 32, 3)),
    data_augmentation,  # Apply augmentation only during training
    layers.Conv2D(32, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Conv2D(64, 3, activation='relu'),
    layers.MaxPooling2D(),
    layers.Flatten(),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax')
])

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

# Train model
history = model.fit(train_images, train_labels, epochs=20, batch_size=64, validation_data=(val_images, val_labels))
Added a data augmentation pipeline using RandomFlip, RandomRotation, RandomZoom, and RandomTranslation layers.
Inserted the augmentation pipeline as the first layer in the model to augment training images on the fly.
Kept validation data unchanged to fairly evaluate model generalization.
Results Interpretation

Before augmentation: Training accuracy was 98%, validation accuracy was 70%. The large gap showed overfitting.

After augmentation: Training accuracy dropped to 90%, validation accuracy improved to 87%. Loss values also show better generalization.

Data augmentation artificially increases training data diversity. This helps the model learn more general features and reduces overfitting, improving validation accuracy.
Bonus Experiment
Try adding dropout layers to the model along with data augmentation to further reduce overfitting.
💡 Hint
Insert dropout layers with rates like 0.3 after convolutional or dense layers to randomly deactivate neurons during training.

Practice

(1/5)
1. What is the main purpose of data augmentation in image training with TensorFlow?
easy
A. To create new images by modifying existing ones to improve model learning
B. To reduce the size of the training dataset
C. To convert images into text format
D. To remove noise from images before training

Solution

  1. Step 1: Understand data augmentation concept

    Data augmentation means making new images by changing existing images, like flipping or rotating.
  2. Step 2: Connect augmentation to model training

    This helps the model see more variety and learn better, improving accuracy.
  3. Final Answer:

    To create new images by modifying existing ones to improve model learning -> Option A
  4. Quick Check:

    Data augmentation = create new images [OK]
Hint: Augmentation means making new images from old ones [OK]
Common Mistakes:
  • Thinking augmentation reduces dataset size
  • Confusing augmentation with noise removal
  • Believing augmentation converts images to text
2. Which TensorFlow layer is correctly used to flip images horizontally during training?
easy
A. tf.keras.layers.RandomFlip('horizontal')
B. tf.keras.layers.RandomFlip('vertical')
C. tf.keras.layers.RandomRotation(0.5)
D. tf.keras.layers.RandomZoom(0.2)

Solution

  1. Step 1: Identify the correct flip direction

    To flip images horizontally, use 'horizontal' as the argument in RandomFlip.
  2. Step 2: Match the correct TensorFlow syntax

    RandomFlip('horizontal') flips images left to right, which is the correct usage.
  3. Final Answer:

    tf.keras.layers.RandomFlip('horizontal') -> Option A
  4. Quick Check:

    Horizontal flip = RandomFlip('horizontal') [OK]
Hint: Use 'horizontal' string inside RandomFlip for left-right flip [OK]
Common Mistakes:
  • Using 'vertical' instead of 'horizontal' for horizontal flip
  • Confusing RandomFlip with RandomRotation
  • Passing numeric values instead of strings to RandomFlip
3. What will be the output shape after applying this augmentation layer to a batch of 32 images of size 64x64x3?
augmentation = tf.keras.Sequential([
  tf.keras.layers.RandomFlip('horizontal'),
  tf.keras.layers.RandomRotation(0.1)
])
augmented_images = augmentation(tf.random.uniform([32, 64, 64, 3]))
print(augmented_images.shape)
medium
A. (32, 128, 128, 3)
B. (64, 64, 3)
C. (32, 64, 64, 3)
D. (32, 64, 64)

Solution

  1. Step 1: Understand input shape and augmentation effect

    The input batch has shape (32, 64, 64, 3), meaning 32 images, each 64x64 pixels with 3 color channels.
  2. Step 2: Check if augmentation changes shape

    RandomFlip and RandomRotation only modify image content, not size or batch count, so output shape stays the same.
  3. Final Answer:

    (32, 64, 64, 3) -> Option C
  4. Quick Check:

    Augmentation keeps shape same = (32, 64, 64, 3) [OK]
Hint: Augmentation changes pixels, not image shape [OK]
Common Mistakes:
  • Assuming rotation changes image size
  • Confusing batch size with image dimensions
  • Expecting channel count to change
4. Identify the error in this TensorFlow augmentation code snippet:
augmentation = tf.keras.Sequential([
  tf.keras.layers.RandomFlip(horizontal),
  tf.keras.layers.RandomRotation(0.2)
])
medium
A. Missing input shape in Sequential
B. RandomRotation cannot take float values
C. Sequential cannot contain augmentation layers
D. RandomFlip requires a string argument like 'horizontal', not a variable

Solution

  1. Step 1: Check RandomFlip argument type

    RandomFlip expects a string such as 'horizontal' or 'vertical', but here horizontal is used without quotes, treated as a variable.
  2. Step 2: Confirm other parts are correct

    RandomRotation accepts float values; Sequential can contain augmentation layers; input shape is optional here.
  3. Final Answer:

    RandomFlip requires a string argument like 'horizontal', not a variable -> Option D
  4. Quick Check:

    RandomFlip argument must be string [OK]
Hint: Put flip direction in quotes: 'horizontal' [OK]
Common Mistakes:
  • Passing variable without quotes to RandomFlip
  • Thinking RandomRotation disallows floats
  • Believing Sequential can't hold augmentation layers
5. You want to augment only the training images but not validation or test images. Which is the best way to apply augmentation in TensorFlow?
hard
A. Apply augmentation layers inside the model and use them for all data
B. Apply augmentation only on the training dataset pipeline before feeding to the model
C. Augment validation and test data to increase evaluation accuracy
D. Apply augmentation after model prediction to improve results

Solution

  1. Step 1: Understand augmentation purpose

    Augmentation is used to increase training data variety to help model learn better.
  2. Step 2: Decide where to apply augmentation

    Applying augmentation only on training data pipeline ensures validation and test data remain original for fair evaluation.
  3. Final Answer:

    Apply augmentation only on the training dataset pipeline before feeding to the model -> Option B
  4. Quick Check:

    Augment training data only = Apply augmentation only on the training dataset pipeline before feeding to the model [OK]
Hint: Augment only training data, not validation/test [OK]
Common Mistakes:
  • Augmenting validation or test data
  • Applying augmentation after prediction
  • Using augmentation layers inside model for all data
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