Activation functions help a neural network learn complex patterns by adding non-linearity. They decide if a neuron should be activated or not.
Activation functions (ReLU, Sigmoid, Softmax) in PyTorch
import torch import torch.nn.functional as F # ReLU activation relu_output = F.relu(input_tensor) # Sigmoid activation sigmoid_output = torch.sigmoid(input_tensor) # Softmax activation softmax_output = F.softmax(input_tensor, dim=1)
ReLU sets negative values to zero and keeps positive values unchanged.
Softmax is used for multi-class outputs and requires specifying the dimension.
import torch import torch.nn.functional as F input_tensor = torch.tensor([-1.0, 0.0, 2.0]) relu_output = F.relu(input_tensor) print(relu_output)
import torch input_tensor = torch.tensor([-1.0, 0.0, 2.0]) sigmoid_output = torch.sigmoid(input_tensor) print(sigmoid_output)
import torch import torch.nn.functional as F input_tensor = torch.tensor([[1.0, 2.0, 3.0]]) softmax_output = F.softmax(input_tensor, dim=1) print(softmax_output)
This program creates a simple neural network with one layer. It applies ReLU, Sigmoid, and Softmax activations to the layer's output. It prints the results for two input samples.
import torch import torch.nn as nn import torch.nn.functional as F class SimpleNet(nn.Module): def __init__(self): super().__init__() self.fc1 = nn.Linear(4, 3) # 4 inputs to 3 outputs def forward(self, x): x = self.fc1(x) relu_out = F.relu(x) sigmoid_out = torch.sigmoid(x) softmax_out = F.softmax(x, dim=1) return relu_out, sigmoid_out, softmax_out # Create model model = SimpleNet() # Sample input: batch of 2 samples, each with 4 features input_data = torch.tensor([[1.0, 2.0, 3.0, 4.0], [4.0, 3.0, 2.0, 1.0]]) relu_out, sigmoid_out, softmax_out = model(input_data) print("ReLU output:", relu_out) print("Sigmoid output:", sigmoid_out) print("Softmax output:", softmax_out)
ReLU is simple and fast, but can cause some neurons to stop learning if they output zero all the time.
Sigmoid is good for binary outputs but can slow learning if values saturate near 0 or 1.
Softmax is best for multi-class classification where outputs represent probabilities.
Activation functions add non-linearity so neural networks can learn complex patterns.
ReLU sets negative values to zero, Sigmoid squashes values between 0 and 1, Softmax turns scores into probabilities.
Choose activation based on your task: ReLU for hidden layers, Sigmoid for binary output, Softmax for multi-class output.
Practice
Solution
Step 1: Understand the output requirements for binary classification
Binary classification outputs a probability between 0 and 1 for one class, so the activation must squash values into this range.Step 2: Match activation functions to output needs
Sigmoid outputs values between 0 and 1, making it ideal for binary classification outputs. ReLU outputs zero or positive values without upper bound, Softmax is for multi-class, and Tanh outputs between -1 and 1.Final Answer:
Sigmoid -> Option AQuick Check:
Binary output needs probability = Sigmoid [OK]
- Choosing ReLU which doesn't limit output to 0-1
- Using Softmax for binary instead of multi-class
- Confusing Tanh with Sigmoid output range
x in PyTorch?Solution
Step 1: Recall PyTorch ReLU usage
ReLU can be applied using the functional API or as a module. The functional API call is torch.nn.functional.relu(x).Step 2: Check each option
torch.relu(x) is incorrect because torch.relu does not exist. torch.activation.relu(x) is invalid syntax. torch.nn.ReLU(x) tries to call the module directly without instantiation. torch.nn.functional.relu(x) correctly uses the functional API.Final Answer:
torch.nn.functional.relu(x) -> Option BQuick Check:
Use functional API for ReLU = torch.nn.functional.relu(x) [OK]
- Trying to call torch.relu which doesn't exist
- Using torch.nn.ReLU without creating an instance
- Confusing module and functional API usage
import torch import torch.nn.functional as F x = torch.tensor([-1.0, 0.0, 2.0]) output = F.relu(x) print(output.tolist())
Solution
Step 1: Understand ReLU behavior on input tensor
ReLU sets negative values to zero and keeps positive values unchanged.Step 2: Apply ReLU to each element
-1.0 becomes 0.0, 0.0 stays 0.0, 2.0 stays 2.0. So output is [0.0, 0.0, 2.0].Final Answer:
[0.0, 0.0, 2.0] -> Option CQuick Check:
ReLU zeroes negatives = [0.0, 0.0, 2.0] [OK]
- Leaving negative values unchanged
- Confusing ReLU with Sigmoid output
- Assuming ReLU changes zeros to ones
x along dimension 1 but throws an error. What is the error and how to fix it?import torch import torch.nn.functional as F x = torch.tensor([[1.0, 2.0, 3.0], [1.0, 2.0, 3.0]]) output = F.softmax(x, dim=2) print(output)
Solution
Step 1: Check tensor shape and dimension argument
Tensor x has shape (2, 3), so valid dims are 0 and 1. Using dim=2 is invalid and causes an error.Step 2: Correct the dimension argument
To apply Softmax across columns (features), use dim=1. This fixes the error.Final Answer:
Dimension 2 is out of range for tensor of shape (2,3); fix by using dim=1 -> Option DQuick Check:
Tensor shape (2,3) means max dim=1 [OK]
- Using invalid dimension index for Softmax
- Thinking Softmax needs 1D input only
- Ignoring error message about dimension out of range
Choose the best option.
Solution
Step 1: Understand multi-class output requirements
For multi-class classification, the output layer should produce probabilities for each class that sum to 1, representing a valid probability distribution.Step 2: Match activation functions to multi-class needs
Softmax converts raw scores into probabilities that sum to 1 across classes. ReLU does not produce probabilities, Sigmoid treats classes independently (not summing to 1), and Tanh outputs values between -1 and 1, not probabilities.Final Answer:
Softmax, because it outputs probabilities that sum to 1 across all classes -> Option AQuick Check:
Multi-class needs sum-to-1 probabilities = Softmax [OK]
- Using Sigmoid which treats classes independently
- Choosing ReLU which is not probabilistic
- Confusing Tanh output range with probabilities
Ready to prove it?
Pass the test and this pattern moves unknown
