What Does Conv2d Output with 32×32 Input, Kernel 3, Padding 1?
Conv2d with 32×32 input, kernel_size=3, stride=1, padding=1 outputs 32×32. This is a “same” convolution — the output has the same spatial dimensions as the input. The formula gives: floor((32 + 2×1 - 3) / 1) + 1 = 32.
Formula Breakdown
The Conv2d output size formula is:
output_size = floor((input_size - kernel_size + 2 * padding) / stride) + 1
Plugging in the values for 32×32 input:
output = floor((32 - 3 + 2*1) / 1) + 1
output = floor((32 - 3 + 2) / 1) + 1
output = floor(31 / 1) + 1
output = floor(31) + 1
output = 32
So the spatial dimensions go from 32×32 to 32×32.
PyTorch Code Example
import torch
import torch.nn as nn
# Define the Conv2d layer
conv = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1, padding=1)
# Create input tensor: (batch, channels, height, width)
x = torch.randn(1, 64, 32, 32)
output = conv(x)
print(output.shape) # torch.Size([1, 128, 32, 32])
# Verify with formula
expected = (32 + 2 * 1 - 3) // 1 + 1
print(f"Expected output size: {expected}x{expected}") # 32x32
Architecture Context
This is the standard “same” convolution preserving spatial dimensions. Used extensively in VGG, ResNet, and DenseNet architectures.
Parameter Count
A Conv2d(64, 128, 3) layer has:
parameters = in_channels * out_channels * kernel_size^2 + out_channels (bias)
parameters = 64 * 128 * 3 * 3 + 128
parameters = 73,856
This layer has 73,856 trainable parameters (73728 weights + 128 bias terms).
Practical Tips
- Memory usage: The output feature map for a single image is 128 × 32 × 32 = 131,072 float values (0.50 MB in float32).
- Batch dimension: Multiply memory by batch size. A batch of 32 uses 16.0 MB for this layer's output alone.
- Same padding rule: For any kernel, setting padding = (kernel_size - 1) / 2 with stride=1 preserves spatial dimensions.