The validation loop helps us check how well our model works on new data it hasn't seen before. The key metrics here are validation loss and validation accuracy. Validation loss tells us how far off the model's predictions are from the true answers on the validation set. Validation accuracy shows the percentage of correct predictions. These metrics matter because they help us see if the model is learning well or just memorizing training data.
Validation loop in PyTorch - Model Metrics & Evaluation
| Predicted Positive | Predicted Negative |
|--------------------|--------------------|
| True Positive (TP) | False Negative (FN) |
| False Positive (FP) | True Negative (TN) |
Example:
TP = 40, FP = 10
FN = 5, TN = 45
Total samples = 100
This matrix helps calculate precision, recall, and accuracy during validation.
During validation, precision and recall help us understand different errors:
- Precision = TP / (TP + FP): How many predicted positives are actually correct?
- Recall = TP / (TP + FN): How many actual positives did the model find?
For example, in a spam filter, high precision means fewer good emails marked as spam (important to avoid annoying users). High recall means catching most spam emails. Depending on the task, we choose which metric to prioritize during validation.
Good validation metrics:
- Validation loss steadily decreases or stays low.
- Validation accuracy is close to training accuracy (no big gap).
- Precision and recall are balanced and high for the task.
Bad validation metrics:
- Validation loss stops improving or increases (sign of overfitting).
- Validation accuracy much lower than training accuracy.
- Very low precision or recall indicating poor predictions.
- Accuracy paradox: High accuracy can be misleading if classes are imbalanced.
- Data leakage: Validation data accidentally used in training leads to overly optimistic metrics.
- Overfitting indicators: Validation loss increasing while training loss decreases.
- Ignoring metric choice: Using accuracy alone when precision or recall matters more.
Your model has 98% accuracy but only 12% recall on fraud cases during validation. Is it good for production? Why or why not?
Answer: No, it is not good. The low recall means the model misses most fraud cases, which is dangerous. Even with high accuracy, the model fails to catch fraud effectively. For fraud detection, high recall is critical to catch as many frauds as possible.
Practice
Solution
Step 1: Understand the role of validation
The validation loop is used to test the model on new data that it has not seen during training.Step 2: Differentiate from training
Unlike training, validation does not update model weights but measures performance like accuracy or loss.Final Answer:
To check how well the model performs on unseen data -> Option BQuick Check:
Validation loop = test model on new data [OK]
- Confusing validation with training
- Thinking validation updates model weights
- Mixing validation with data loading
Solution
Step 1: Recall PyTorch model modes
In PyTorch,model.eval()sets the model to evaluation mode, disabling dropout and batch norm updates.Step 2: Identify correct method for validation
Validation requires evaluation mode, somodel.eval()is correct; others do not exist or are for training.Final Answer:
model.eval() -> Option AQuick Check:
Use model.eval() for validation [OK]
- Using model.train() during validation
- Assuming model.validate() exists
- Confusing test() with eval()
model.eval()
correct = 0
with torch.no_grad():
for inputs, labels in val_loader:
outputs = model(inputs)
predicted = outputs.argmax(dim=1)
correct += (predicted == labels).sum().item()
accuracy = correct / len(val_loader.dataset)
print(f"Accuracy: {accuracy:.2f}")Solution
Step 1: Analyze the code logic
The code sets model to eval mode, disables gradient calculation, and counts correct predictions over validation data.Step 2: Understand the output calculation
Accuracy is computed as correct predictions divided by total validation samples, then printed.Final Answer:
Prints the accuracy of the model on validation data -> Option CQuick Check:
Validation loop code prints accuracy [OK]
- Expecting loss instead of accuracy
- Thinking optimizer is needed in validation
- Confusing training and validation accuracy
model.eval()
for inputs, labels in val_loader:
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
total_loss += loss.item()Solution
Step 1: Understand validation loop purpose
Validation should not update model weights or compute gradients, so backward() is not needed.Step 2: Identify the error
Calling loss.backward() computes gradients, which is incorrect in validation; it wastes resources and may cause errors.Final Answer:
Calling loss.backward() during validation -> Option DQuick Check:
No backward() in validation loop [OK]
- Running backward() in validation
- Confusing train and eval modes
- Forgetting torch.no_grad() in validation
model.eval()
total_correct = 0
total_samples = 0
with torch.no_grad():
for inputs, labels in val_loader:
outputs = model(inputs)
predicted = outputs.argmax(dim=1)
# What goes here?
accuracy = total_correct / total_samples
print(f"Validation Accuracy: {accuracy:.2f}")Solution
Step 1: Calculate correct predictions
Use (predicted == labels).sum().item() to count correct predictions as a Python number.Step 2: Update total samples count
Use labels.size(0) to add the batch size to total samples for accurate accuracy calculation.Final Answer:
total_correct += (predicted == labels).sum().item() total_samples += labels.size(0) -> Option AQuick Check:
Sum correct matches and batch size for accuracy [OK]
- Summing predicted values instead of correct matches
- Using != instead of == for correct count
- Adding batch count incorrectly as len(val_loader)
Ready to prove it?
Pass the test and this pattern moves unknown
