Bird
Raised Fist0
PyTorchml~20 mins

nn.Conv2d layers 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
🎖️
Conv2d Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output shape after Conv2d layer
What is the output shape of the tensor after applying this Conv2d layer?

Input tensor shape: (batch_size=1, channels=3, height=32, width=32)
Layer: nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5, stride=1, padding=0)
PyTorch
import torch
import torch.nn as nn

conv = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=5, stride=1, padding=0)
input_tensor = torch.randn(1, 3, 32, 32)
output = conv(input_tensor)
print(output.shape)
A(1, 6, 27, 27)
B(1, 3, 28, 28)
C(1, 6, 28, 28)
D(1, 6, 32, 32)
Attempts:
2 left
💡 Hint
Remember the formula for output size: (W - K + 2P) / S + 1
Model Choice
intermediate
2:00remaining
Choosing Conv2d parameters for same input-output size
You want a Conv2d layer that keeps the input height and width the same after convolution.
Input shape: (batch_size=1, channels=3, height=28, width=28)
Which Conv2d layer parameters will achieve this?
Ann.Conv2d(3, 10, kernel_size=3, stride=1, padding=1)
Bnn.Conv2d(3, 10, kernel_size=5, stride=1, padding=0)
Cnn.Conv2d(3, 10, kernel_size=3, stride=2, padding=1)
Dnn.Conv2d(3, 10, kernel_size=1, stride=1, padding=0)
Attempts:
2 left
💡 Hint
Padding can help keep the size same if chosen correctly.
Hyperparameter
advanced
2:00remaining
Effect of stride on Conv2d output size
Given an input tensor of shape (1, 3, 64, 64), which Conv2d layer will produce an output with height and width equal to 16?
Ann.Conv2d(3, 8, kernel_size=3, stride=4, padding=0)
Bnn.Conv2d(3, 8, kernel_size=5, stride=2, padding=0)
Cnn.Conv2d(3, 8, kernel_size=3, stride=3, padding=1)
Dnn.Conv2d(3, 8, kernel_size=7, stride=4, padding=0)
Attempts:
2 left
💡 Hint
Use the formula: output = (W - K + 2P)/S + 1 and solve for output=16.
🔧 Debug
advanced
2:00remaining
Identifying error in Conv2d layer usage
What error will this code raise when run?

conv = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3)
input_tensor = torch.randn(1, 1, 28, 28)
output = conv(input_tensor)
PyTorch
import torch
import torch.nn as nn
conv = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3)
input_tensor = torch.randn(1, 1, 28, 28)
output = conv(input_tensor)
ATypeError: Conv2d() missing required positional argument 'stride'
BRuntimeError: Given groups=1, weight of size [6, 3, 3, 3], expected input[1, 1, 28, 28] to have 3 channels, but got 1 channels instead
CValueError: kernel_size must be odd
DNo error, runs successfully
Attempts:
2 left
💡 Hint
Check if input channels match the Conv2d in_channels parameter.
🧠 Conceptual
expert
3:00remaining
Understanding dilation effect in Conv2d
How does increasing the dilation parameter in nn.Conv2d affect the receptive field and output size?

Choose the correct statement.
ADilation has no effect on receptive field or output size, only on computation speed
BIncreasing dilation decreases the receptive field and increases output size
CIncreasing dilation increases output size but keeps receptive field constant
DIncreasing dilation increases the receptive field without changing the kernel size, and reduces the output size if padding is not adjusted
Attempts:
2 left
💡 Hint
Think of dilation as spacing out kernel elements, making the filter cover a larger area.

Practice

(1/5)
1. What does the nn.Conv2d layer in PyTorch primarily do?
easy
A. It increases the image size by adding pixels.
B. It slides filters over images to find patterns.
C. It converts images to grayscale.
D. It sorts images by color intensity.

Solution

  1. Step 1: Understand the role of convolution layers

    Convolution layers slide small filters over input images to detect features like edges or textures.
  2. Step 2: Match the function to the options

    Only It slides filters over images to find patterns. correctly describes this sliding filter action, while others describe unrelated image operations.
  3. Final Answer:

    It slides filters over images to find patterns. -> Option B
  4. Quick Check:

    Convolution = sliding filters [OK]
Hint: Conv2d = sliding filters over images to find features [OK]
Common Mistakes:
  • Thinking Conv2d changes image size by adding pixels
  • Confusing Conv2d with image color adjustments
  • Assuming Conv2d sorts or rearranges pixels
2. Which of the following is the correct way to create a Conv2d layer with 3 input channels, 16 output channels, and a 3x3 kernel in PyTorch?
easy
A. nn.Conv2d(3, 16, kernel_size=3)
B. nn.Conv2d(16, 3, kernel_size=3)
C. nn.Conv2d(3, 16, kernel=3)
D. nn.Conv2d(input=3, output=16, size=3)

Solution

  1. Step 1: Recall Conv2d constructor parameters

    The correct order is nn.Conv2d(in_channels, out_channels, kernel_size).
  2. Step 2: Check each option

    nn.Conv2d(3, 16, kernel_size=3) matches the correct parameter order and uses the correct keyword for kernel size. The other options have wrong parameter order or incorrect keywords.
  3. Final Answer:

    nn.Conv2d(3, 16, kernel_size=3) -> Option A
  4. Quick Check:

    Conv2d(in, out, kernel_size) = A [OK]
Hint: Remember Conv2d(in_channels, out_channels, kernel_size) [OK]
Common Mistakes:
  • Swapping input and output channels
  • Using wrong parameter names like 'kernel' instead of 'kernel_size'
  • Passing parameters as keywords not supported by Conv2d
3. What will be the output shape of the following PyTorch Conv2d layer when applied to an input tensor of shape (1, 3, 32, 32)?
conv = nn.Conv2d(3, 6, kernel_size=5)
output = conv(torch.randn(1, 3, 32, 32))
print(output.shape)
medium
A. torch.Size([1, 3, 28, 28])
B. torch.Size([1, 6, 32, 32])
C. torch.Size([6, 3, 28, 28])
D. torch.Size([1, 6, 28, 28])

Solution

  1. Step 1: Calculate output spatial size

    Output size = (Input size - Kernel size + 1) = (32 - 5 + 1) = 28 for both height and width.
  2. Step 2: Determine output channels and batch size

    Output channels = 6, batch size = 1, so output shape is (1, 6, 28, 28).
  3. Final Answer:

    torch.Size([1, 6, 28, 28]) -> Option D
  4. Quick Check:

    Output shape = (batch, out_channels, 28, 28) [OK]
Hint: Output size = input - kernel + 1 if stride=1, padding=0 [OK]
Common Mistakes:
  • Assuming output size equals input size without padding
  • Mixing up input and output channels in shape
  • Forgetting batch size dimension
4. Identify the error in this Conv2d layer definition:
conv = nn.Conv2d(3, 16, kernel_size=3, stride=2, padding=3)
output = conv(torch.randn(1, 3, 28, 28))
print(output.shape)
medium
A. Stride cannot be 2 in Conv2d.
B. Input tensor shape is incorrect for 3 input channels.
C. Padding is too large causing output size to increase unexpectedly.
D. Kernel size must be an odd number.

Solution

  1. Step 1: Calculate output size with given parameters

    Output size formula: floor((Input + 2*padding - kernel_size)/stride) + 1 = floor((28 + 6 - 3)/2) + 1 = floor(31/2) + 1 = 15 + 1 = 16.
  2. Step 2: Understand padding effect

    Padding=3 is large for kernel=3, causing output spatial size to increase unexpectedly, which is unusual and may cause unexpected behavior.
  3. Final Answer:

    Padding is too large causing output size to increase unexpectedly. -> Option C
  4. Quick Check:

    Large padding inflates output size [OK]
Hint: Check padding size relative to kernel size for output shape [OK]
Common Mistakes:
  • Thinking stride=2 is invalid
  • Assuming input shape is wrong for 3 channels
  • Believing kernel size must be odd always
5. You want to design a Conv2d layer that keeps the input image size (28x28) unchanged after convolution with a 5x5 kernel and stride 1. Which padding value should you use?
hard
A. Padding = 2
B. Padding = 1
C. Padding = 0
D. Padding = 3

Solution

  1. Step 1: Use output size formula for Conv2d

    Output size = floor((Input + 2*padding - kernel_size)/stride) + 1. We want output = input = 28, stride=1, kernel=5.
  2. Step 2: Solve for padding

    28 = (28 + 2*padding - 5) + 1 -> 28 = 24 + 2*padding -> 2*padding = 4 -> padding = 2.
  3. Final Answer:

    Padding = 2 -> Option A
  4. Quick Check:

    Padding 2 keeps size with 5x5 kernel [OK]
Hint: Padding = (kernel_size - 1) / 2 for same size [OK]
Common Mistakes:
  • Using zero padding and expecting same size
  • Choosing padding less than 2 for 5x5 kernel
  • Confusing stride effect with padding