Loss functions tell us how wrong our model's predictions are. They help the model learn by showing it what to fix.
Loss functions (MSELoss, CrossEntropyLoss) in PyTorch
import torch.nn as nn # For regression tasks (continuous values) loss_fn = nn.MSELoss() # For classification tasks (multiple classes) loss_fn = nn.CrossEntropyLoss()
MSELoss stands for Mean Squared Error Loss. It measures the average squared difference between predicted and true values.
CrossEntropyLoss combines softmax and negative log likelihood. It is used for classification tasks with class labels.
import torch import torch.nn as nn loss_fn = nn.MSELoss() predictions = torch.tensor([2.5, 0.0, 2.0, 8.0]) true_values = torch.tensor([3.0, -0.5, 2.0, 7.0]) loss = loss_fn(predictions, true_values) print(loss.item())
import torch import torch.nn as nn loss_fn = nn.CrossEntropyLoss() predictions = torch.tensor([[1.0, 2.0, 0.5], [0.5, 0.2, 2.1]]) # raw scores (logits) true_labels = torch.tensor([1, 2]) # class indices loss = loss_fn(predictions, true_labels) print(loss.item())
This program shows how to use MSELoss for a regression example and CrossEntropyLoss for a classification example. It prints the loss values.
import torch import torch.nn as nn # Example with MSELoss (regression) loss_fn_mse = nn.MSELoss() pred_mse = torch.tensor([1.5, 2.0, 3.5]) true_mse = torch.tensor([2.0, 2.0, 3.0]) loss_mse = loss_fn_mse(pred_mse, true_mse) print(f"MSE Loss: {loss_mse.item():.4f}") # Example with CrossEntropyLoss (classification) loss_fn_ce = nn.CrossEntropyLoss() pred_ce = torch.tensor([[2.0, 1.0, 0.1], [0.1, 0.2, 3.0]]) # logits true_ce = torch.tensor([0, 2]) # class labels loss_ce = loss_fn_ce(pred_ce, true_ce) print(f"CrossEntropy Loss: {loss_ce.item():.4f}")
For CrossEntropyLoss, input predictions should be raw scores (logits), not probabilities.
MSELoss expects predictions and targets to have the same shape and be continuous values.
Loss values help guide the model to improve by minimizing them during training.
Loss functions measure how far predictions are from true values.
MSELoss is for continuous value prediction (regression).
CrossEntropyLoss is for classification with class labels.
Practice
Solution
Step 1: Understand the type of prediction
Predicting house prices is a regression problem where output is continuous.Step 2: Match loss function to problem type
MSELosscalculates mean squared error, ideal for continuous outputs.CrossEntropyLossis for classification, not regression.Final Answer:
torch.nn.MSELoss -> Option AQuick Check:
Regression uses MSELoss = C [OK]
- Choosing CrossEntropyLoss for regression tasks
- Confusing BCELoss with MSELoss
- Using NLLLoss without log probabilities
Solution
Step 1: Recall PyTorch loss function syntax
Loss functions are intorch.nnand instantiated with parentheses.Step 2: Identify correct class name and module
CrossEntropyLossis the correct class name undertorch.nn. Options A misses 'Loss' and C misses 'nn'.Final Answer:
loss = torch.nn.CrossEntropyLoss() -> Option CQuick Check:
Correct class and module = D [OK]
- Missing parentheses when creating loss object
- Using torch.CrossEntropyLoss() instead of torch.nn.CrossEntropyLoss()
- Confusing MSELoss with CrossEntropyLoss
torch.nn.MSELoss on predictions tensor([2.0, 3.0]) and targets tensor([1.0, 5.0])?Solution
Step 1: Calculate squared differences
Differences: (2.0-1.0)=1.0, (3.0-5.0)=-2.0; squared: 1.0, 4.0Step 2: Compute mean of squared differences
Mean = (1.0 + 4.0) / 2 = 2.5Final Answer:
2.5 -> Option AQuick Check:
MSE = mean squared error = 2.5 [OK]
- Forgetting to square the differences
- Summing without averaging
- Mixing up prediction and target order
import torch loss_fn = torch.nn.CrossEntropyLoss() pred = torch.tensor([[0.2, 0.8], [0.6, 0.4]]) target = torch.tensor([1, 0]) loss = loss_fn(pred, target) print(loss.item())
Solution
Step 1: Check input requirements for CrossEntropyLoss
CrossEntropyLoss expects raw scores (logits), not probabilities.Step 2: Analyze given predictions
Predictions are probabilities (sum to 1), so applying CrossEntropyLoss directly causes incorrect loss calculation.Final Answer:
Predictions should be raw scores (logits), not probabilities -> Option DQuick Check:
CrossEntropyLoss needs logits = A [OK]
- Passing probabilities instead of logits to CrossEntropyLoss
- Using one-hot targets instead of class indices
- Confusing MSELoss with CrossEntropyLoss for classification
Solution
Step 1: Identify loss function for multi-class classification
CrossEntropyLoss is designed for multi-class classification with logits.Step 2: Determine correct target format
CrossEntropyLoss expects target as class indices (integers), not one-hot vectors.Final Answer:
Use torch.nn.CrossEntropyLoss with target as class indices (0 to 3) -> Option BQuick Check:
CrossEntropyLoss + class indices = B [OK]
- Passing one-hot vectors as targets to CrossEntropyLoss
- Using MSELoss for classification
- Using BCELoss for multi-class without sigmoid
Ready to prove it?
Pass the test and this pattern moves unknown
