For ResNet models, common metrics like accuracy and loss are important to see how well the model learns. But because ResNet is deep, watch training and validation loss to check if skip connections help avoid problems like vanishing gradients. Skip connections help the model learn better by letting information flow directly, so metrics like training speed and stable accuracy gains matter.
ResNet and skip connections in Computer Vision - Model Metrics & Evaluation
Start learning this pattern below
Jump into concepts and practice - no test required
| Predicted Cat | Predicted Dog |
|---------------|---------------|
| True Cat: 45 | False Dog: 5 |
| False Cat: 3 | True Dog: 47 |
Total samples = 45 + 5 + 3 + 47 = 100
Precision (Cat) = TP / (TP + FP) = 45 / (45 + 3) = 0.9375
Recall (Cat) = TP / (TP + FN) = 45 / (45 + 5) = 0.9
Precision (Dog) = 47 / (47 + 5) = 0.904
Recall (Dog) = 47 / (47 + 3) = 0.94
Imagine ResNet is used to detect cats in photos. If you want to be sure every cat found is really a cat, you want high precision (few false cats). But if you want to find all cats, even if some are wrong, you want high recall.
Skip connections help ResNet learn deeper features, improving both precision and recall by reducing errors from too shallow or too deep layers.
Good: Accuracy above 90%, balanced precision and recall near 90% or more, and stable training loss showing skip connections help learning.
Bad: Accuracy stuck around 50-60%, big gap between training and validation loss (overfitting), or very low recall meaning the model misses many true cases.
- Accuracy paradox: High accuracy but poor recall if data is unbalanced.
- Ignoring training vs validation loss differences can hide overfitting.
- Not checking if skip connections are correctly implemented can cause training to fail silently.
- Data leakage can inflate metrics falsely.
Your ResNet model has 98% accuracy but only 12% recall on the cat class. Is it good for production? Why or why not?
Answer: No, it is not good. The model misses most cats (low recall), so it fails to find many true cats even if overall accuracy looks high. This means it is unreliable for detecting cats.
Practice
Solution
Step 1: Understand skip connections role
Skip connections let the input bypass some layers and add directly to the output, helping information flow.Step 2: Connect to training deep networks
This helps avoid problems like vanishing gradients, making training deep networks easier and more accurate.Final Answer:
To allow information to flow directly across layers, helping training -> Option CQuick Check:
Skip connections improve training by direct flow [OK]
- Thinking skip connections reduce layers
- Confusing skip connections with input size changes
- Assuming skip connections replace convolution
x and output tensor out?Solution
Step 1: Recall skip connection operation
Skip connections add the input tensor to the output tensor element-wise.Step 2: Match with correct syntax
The addition operationout = x + outcorrectly implements the skip connection.Final Answer:
out = x + out -> Option DQuick Check:
Skip connection = addition [OK]
- Using multiplication instead of addition
- Using subtraction or division which breaks skip connection
- Confusing order of operands
import torch
import torch.nn as nn
class SimpleResBlock(nn.Module):
def __init__(self):
super().__init__()
self.conv = nn.Conv2d(3, 3, kernel_size=3, padding=1)
self.relu = nn.ReLU()
self.conv.weight.data.fill_(0.0)
self.conv.bias.data.fill_(1.0)
def forward(self, x):
out = self.conv(x)
out = self.relu(out)
out = out + x
return out
block = SimpleResBlock()
input_tensor = torch.ones(1, 3, 5, 5)
output = block(input_tensor)
print(output[0,0,0,0].item())What will be printed?
Solution
Step 1: Analyze convolution output
The convolution with kernel size 3 and padding 1 keeps the input size. Since input is all ones, convolution output will be some positive values (not zero).Step 2: Add input and apply ReLU
ReLU keeps positive values. Then adding input tensor (all ones) increases values. So output values > 1.Final Answer:
2.0 -> Option AQuick Check:
Output = conv + input > 1 [OK]
- Assuming output equals input without addition
- Ignoring padding effect on size
- Expecting zero or error due to shape mismatch
def forward(self, x):
out = self.conv(x)
out = self.relu(out)
out = out + x
return outThe error says: "The size of tensor a (64) must match the size of tensor b (128) at non-singleton dimension 1." What is the likely cause?
Solution
Step 1: Understand error message
The error says channel sizes differ (64 vs 128), so tensors can't be added element-wise.Step 2: Check convolution output channels
If convolution changes channels from 64 to 128, input and output shapes differ, causing addition error.Final Answer:
The convolution changes the number of channels, so shapes don't match for addition -> Option AQuick Check:
Channel mismatch causes addition error [OK]
- Blaming ReLU for shape errors
- Ignoring channel dimension mismatch
- Assuming addition works regardless of shape
Solution
Step 1: Identify shape mismatch
Input has 64 channels and size 32x32; output has 128 channels and size 16x16 due to stride 2.Step 2: Match shapes for addition
To add tensors, input must be transformed to 128 channels and 16x16 size, done by 1x1 convolution with stride 2.Final Answer:
Use a 1x1 convolution with stride 2 on the input to match shape before addition -> Option BQuick Check:
Match shape with 1x1 conv before skip add [OK]
- Adding tensors with different shapes directly
- Using pooling on output instead of input
- Skipping skip connection when channels differ
