Bird
Raised Fist0
PyTorchml~20 mins

Data augmentation in PyTorch - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Data Augmentation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of image rotation augmentation
Given the following PyTorch code applying a rotation augmentation to a 3x3 grayscale image tensor, what is the output tensor after the transformation?
PyTorch
import torch
import torchvision.transforms as T

image = torch.tensor([[1, 2, 3],
                      [4, 5, 6],
                      [7, 8, 9]], dtype=torch.float32).unsqueeze(0).unsqueeze(0)

transform = T.RandomRotation(degrees=(90, 90))

rotated_image = transform(image)

print(rotated_image.squeeze().int())
A
[[1 4 7]
 [2 5 8]
 [3 6 9]]
B
[[7 4 1]
 [8 5 2]
 [9 6 3]]
C
[[9 8 7]
 [6 5 4]
 [3 2 1]]
D
[[3 6 9]
 [2 5 8]
 [1 4 7]]
Attempts:
2 left
💡 Hint
Think about how a 90 degree rotation affects the position of pixels in a matrix.
Model Choice
intermediate
1:30remaining
Best augmentation for small dataset with overfitting
You have a small image dataset and your model is overfitting. Which data augmentation technique is most effective to reduce overfitting?
AReducing learning rate without augmentation
BAdding Gaussian noise to labels
CIncreasing batch size without augmentation
DRandom horizontal flip and random crop
Attempts:
2 left
💡 Hint
Think about augmentations that increase data diversity realistically.
Hyperparameter
advanced
2:00remaining
Choosing rotation degree range for augmentation
You want to augment images by rotating them randomly. Which rotation degree range is most appropriate to preserve the original image semantics for handwritten digit recognition?
ARotate between -10 and 10 degrees
BRotate between -180 and 180 degrees
CRotate between 90 and 270 degrees
DRotate between 45 and 135 degrees
Attempts:
2 left
💡 Hint
Consider how much rotation changes the digit's appearance.
Metrics
advanced
1:30remaining
Effect of augmentation on validation accuracy
You train two identical models on the same dataset. Model A uses data augmentation; Model B does not. After training, Model A has 85% validation accuracy, Model B has 80%. What does this difference most likely indicate?
AAugmentation caused overfitting by adding noise
BModel B trained longer, so it performed worse
CAugmentation improved generalization by increasing data diversity
DValidation data was augmented, causing bias
Attempts:
2 left
💡 Hint
Think about how augmentation affects model learning on unseen data.
🔧 Debug
expert
2:30remaining
Debugging incorrect augmentation pipeline
You apply this PyTorch augmentation pipeline but the output images are always identical to the input. What is the bug? Code: import torchvision.transforms as T transform = T.Compose([ T.RandomHorizontalFlip(p=0), T.RandomRotation(degrees=0), T.ColorJitter(brightness=0) ]) augmented_image = transform(input_image)
AAll augmentation parameters are set to zero probability or zero effect, so no change occurs
BThe Compose function is missing a call to .to_tensor(), so no augmentation happens
CRandomHorizontalFlip requires p=1 to flip images always, p=0 disables it
DColorJitter requires at least one non-zero parameter to change brightness
Attempts:
2 left
💡 Hint
Check the parameters controlling augmentation strength.

Practice

(1/5)
1. What is the main purpose of data augmentation in PyTorch training pipelines?
easy
A. To reduce the size of the training dataset
B. To create new training data by modifying existing data
C. To speed up model training by skipping data preprocessing
D. To convert data into a different file format

Solution

  1. Step 1: Understand data augmentation concept

    Data augmentation means making new training examples by changing existing ones, like flipping or rotating images.
  2. Step 2: Identify the purpose in training

    This helps the model see more variety and avoid memorizing only the original data, improving learning.
  3. Final Answer:

    To create new training data by modifying existing data -> Option B
  4. Quick Check:

    Data augmentation = create new data [OK]
Hint: Data augmentation means changing data to get more examples [OK]
Common Mistakes:
  • Thinking it reduces dataset size
  • Confusing augmentation with speeding training
  • Believing it changes file formats
2. Which of the following is the correct way to apply a random horizontal flip to an image tensor using torchvision transforms?
easy
A. transforms.RandomHorizontalFlip(p=0.5)
B. transforms.HorizontalFlip(prob=0.5)
C. transforms.RandomFlip(direction='horizontal')
D. transforms.FlipHorizontal(0.5)

Solution

  1. Step 1: Recall torchvision transform syntax

    The correct transform for horizontal flip is RandomHorizontalFlip with a probability parameter p.
  2. Step 2: Match correct syntax

    transforms.RandomHorizontalFlip(p=0.5) uses transforms.RandomHorizontalFlip(p=0.5), which is the exact PyTorch syntax.
  3. Final Answer:

    transforms.RandomHorizontalFlip(p=0.5) -> Option A
  4. Quick Check:

    Correct transform name and parameter = C [OK]
Hint: Look for 'RandomHorizontalFlip' with p= probability [OK]
Common Mistakes:
  • Using wrong transform names
  • Using 'prob' instead of 'p'
  • Incorrect parameter names or missing parentheses
3. What will be the output shape of the image tensor after applying the following transform?
transform = transforms.Compose([
    transforms.RandomRotation(30),
    transforms.ToTensor()
])

image = Image.open('sample.jpg')
tensor_image = transform(image)
print(tensor_image.shape)
medium
A. [3, H, W] where H and W are original image height and width
B. [H, W, 3] where H and W are original image height and width
C. [1, H, W] grayscale image shape
D. [3, 30, 30] fixed size after rotation

Solution

  1. Step 1: Understand transforms.Compose and RandomRotation

    RandomRotation rotates the image but keeps the original size (height and width). ToTensor converts the image to a tensor with shape [channels, height, width].
  2. Step 2: Determine output tensor shape

    Since the image is color (3 channels), the tensor shape will be [3, H, W], where H and W are original height and width.
  3. Final Answer:

    [3, H, W] where H and W are original image height and width -> Option A
  4. Quick Check:

    Rotation keeps size, ToTensor outputs [3, H, W] [OK]
Hint: ToTensor outputs [channels, height, width] shape [OK]
Common Mistakes:
  • Confusing channel order as last dimension
  • Assuming rotation changes image size
  • Thinking output is grayscale shape
4. Identify the error in this PyTorch data augmentation code snippet:
transform = transforms.Compose([
    transforms.RandomHorizontalFlip(prob=0.5),
    transforms.RandomRotation(degrees=45),
    transforms.ToTensor()
])
medium
A. RandomRotation degrees must be a tuple, not a single number
B. ToTensor should come before RandomRotation
C. RandomHorizontalFlip should use keyword argument p=0.5
D. Compose cannot combine multiple transforms

Solution

  1. Step 1: Check RandomHorizontalFlip usage

    RandomHorizontalFlip requires the probability argument as p=0.5, not prob=0.5.
  2. Step 2: Verify other transforms

    RandomRotation accepts a single number for degrees, ToTensor can come last, and Compose supports multiple transforms.
  3. Final Answer:

    RandomHorizontalFlip should use keyword argument p=0.5 -> Option C
  4. Quick Check:

    Correct argument name = p [OK]
Hint: Check argument names carefully in transform constructors [OK]
Common Mistakes:
  • Passing positional argument instead of keyword
  • Thinking degrees must be tuple
  • Misordering transforms in Compose
5. You want to augment a dataset of images to improve model robustness. Which combination of transforms would best increase variety without changing image size or color channels?
Options:
A) RandomHorizontalFlip(p=0.5) + RandomRotation(15) + ColorJitter(brightness=0.2)
B) RandomResizedCrop(size=224) + Grayscale(num_output_channels=1)
C) RandomVerticalFlip(p=1.0) + RandomRotation(90) + ToTensor()
D) Resize(128) + RandomCrop(64) + RandomHorizontalFlip(p=0.5)
hard
A. Resize and crop to smaller size (changes image size)
B. RandomResizedCrop and converting to grayscale (changes size and channels)
C. Vertical flip and 90-degree rotation (may change orientation drastically)
D. RandomHorizontalFlip, small RandomRotation, and ColorJitter to vary brightness

Solution

  1. Step 1: Analyze each option's effect on size and channels

    RandomHorizontalFlip, small RandomRotation, and ColorJitter to vary brightness flips, rotates slightly, and changes brightness without resizing or changing channels. RandomResizedCrop and converting to grayscale (changes size and channels) changes size and converts to grayscale. Vertical flip and 90-degree rotation (may change orientation drastically) rotates 90 degrees and flips vertically, which changes orientation drastically. Resize and crop to smaller size (changes image size) resizes and crops, changing size.
  2. Step 2: Choose the option that keeps size and channels but increases variety

    RandomHorizontalFlip, small RandomRotation, and ColorJitter to vary brightness best fits the requirement by augmenting with flips, small rotations, and brightness changes without altering size or channels.
  3. Final Answer:

    RandomHorizontalFlip, small RandomRotation, and ColorJitter to vary brightness -> Option D
  4. Quick Check:

    Keep size and channels, add mild augmentations = A [OK]
Hint: Pick augmentations that don't resize or change color channels [OK]
Common Mistakes:
  • Choosing transforms that resize images
  • Converting images to grayscale unintentionally
  • Using large rotations that distort orientation