The forward pass is how a model makes predictions from input data. It moves data through the model step-by-step to get results.
Forward pass computation in PyTorch
output = model(input_data)
This calls the model's forward method automatically.
input_data must be a tensor with the right shape.
output = model(torch.randn(1, 3, 28, 28))
output = model(input_tensor)
This code defines a simple model with one linear layer. It creates an input tensor with 4 features and runs the forward pass to get the output predictions.
import torch import torch.nn as nn # Define a simple model class SimpleModel(nn.Module): def __init__(self): super().__init__() self.linear = nn.Linear(4, 2) # input 4 features, output 2 def forward(self, x): return self.linear(x) # Create model instance model = SimpleModel() # Create example input tensor (batch size 1, 4 features) input_data = torch.tensor([[1.0, 2.0, 3.0, 4.0]]) # Run forward pass output = model(input_data) print("Input:", input_data) print("Output:", output)
The forward pass does not change model weights; it only computes outputs.
Use model.eval() mode when testing to disable training behaviors like dropout.
Input shapes must match what the model expects, or you will get errors.
The forward pass moves input data through the model to get predictions.
Call the model with input tensors to run the forward pass.
It is used during training, testing, and debugging.
Practice
Solution
Step 1: Understand the role of forward pass
The forward pass takes input data and processes it through the model layers to produce output predictions.Step 2: Differentiate from other processes
Updating weights happens in backward pass, saving is separate, and initialization is before training.Final Answer:
It moves input data through the model to get predictions. -> Option AQuick Check:
Forward pass = data to predictions [OK]
- Confusing forward pass with weight update
- Thinking forward pass saves the model
- Mixing initialization with forward pass
model with input tensor x?Solution
Step 1: Recall PyTorch model call syntax
In PyTorch, callingmodel(x)runs the forward pass internally.Step 2: Identify incorrect options
Directly callingmodel.forward(x)is discouraged;model.runandmodel.predictare not standard methods.Final Answer:
output = model(x) -> Option DQuick Check:
Use model(x) to run forward pass [OK]
- Calling model.forward(x) directly
- Using non-existent methods like model.run or model.predict
- Confusing syntax with other frameworks
import torch
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(4, 2)
def forward(self, x):
return self.linear(x)
model = SimpleNet()
x = torch.randn(3, 4)
output = model(x)
print(output.shape)Solution
Step 1: Analyze input and layer dimensions
The input tensor has shape (3, 4), meaning batch size 3 and feature size 4. The linear layer maps 4 features to 2 outputs.Step 2: Compute output shape
Applying linear layer to each batch item changes feature size from 4 to 2, so output shape is (3, 2).Final Answer:
torch.Size([3, 2]) -> Option AQuick Check:
Input batch 3, features 4 -> output features 2 [OK]
- Mixing batch and feature dimensions
- Assuming output shape equals input shape
- Confusing input and output feature sizes
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(5, 3)
def forward(self, x):
return self.fc(x)
model = Net()
x = torch.randn(4, 4)
output = model(x)
print(output)Solution
Step 1: Check input tensor shape vs Linear layer input
The Linear layer expects input features of size 5, but input tensor has shape (4, 4), so feature size is 4, which mismatches.Step 2: Confirm other options
GPU usage is optional, activation functions are not mandatory, and forward method correctly returns output.Final Answer:
Input tensor shape does not match Linear layer input size. -> Option CQuick Check:
Input features must match Linear input size [OK]
- Ignoring input size mismatch errors
- Assuming GPU is required for forward pass
- Thinking activation is always needed
class ChainNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(3, 4)
self.fc2 = nn.Linear(4, 2)
def forward(self, x):
x = self.fc1(x)
x = torch.relu(x)
x = self.fc2(x)
return x
model = ChainNet()
x = torch.tensor([[1.0, 2.0, 3.0]])
output = model(x)
print(output)
What is the shape of output and why?Solution
Step 1: Analyze input and layer sizes
Input tensor shape is (1, 3) -- batch size 1, feature size 3. First layer maps 3 to 4 features, second layer maps 4 to 2 features.Step 2: Determine output shape after forward pass
After passing through both layers, output shape is (1, 2) because batch size stays the same and final layer outputs 2 features.Final Answer:
torch.Size([1, 2]) because input batch size is 1 and final layer outputs 2 features. -> Option BQuick Check:
Batch size unchanged, output features = final layer output [OK]
- Multiplying output sizes instead of chaining
- Confusing batch size with feature size
- Ignoring activation does not change shape
Ready to prove it?
Pass the test and this pattern moves unknown
