Broadcasting helps PyTorch do math on tensors of different shapes easily. It saves time and code by automatically expanding smaller tensors to match bigger ones.
Broadcasting in PyTorch
result = tensor1 + tensor2
PyTorch automatically broadcasts tensors if their shapes are compatible.
Broadcasting works from the rightmost dimensions going left.
a = torch.tensor([[1, 2, 3], [4, 5, 6]]) b = torch.tensor([10, 20, 30]) c = a + b
x = torch.tensor([1, 2, 3]) y = torch.tensor([[10], [20], [30]]) z = x + y
This program shows how PyTorch adds a vector to each row of a matrix automatically using broadcasting.
import torch # Define a 2x3 tensor matrix = torch.tensor([[1, 2, 3], [4, 5, 6]]) # Define a 1D tensor with 3 elements vector = torch.tensor([10, 20, 30]) # Add vector to each row of matrix using broadcasting result = matrix + vector print("Matrix shape:", matrix.shape) print("Vector shape:", vector.shape) print("Result shape:", result.shape) print("Result tensor:") print(result)
Broadcasting only works if the dimensions are compatible: either equal or one of them is 1.
If shapes are not compatible, PyTorch will raise an error.
Broadcasting helps avoid writing loops and makes code faster and cleaner.
Broadcasting lets PyTorch do math on tensors with different shapes by expanding smaller ones.
It works from the rightmost dimension and requires compatible shapes.
Use broadcasting to write simpler and faster tensor operations.
Practice
Solution
Step 1: Understand broadcasting concept
Broadcasting allows PyTorch to perform element-wise operations on tensors with different shapes by expanding the smaller tensor to match the larger one.Step 2: Compare options with definition
Only Perform operations on tensors of different shapes by expanding smaller ones correctly describes this behavior. Other options describe unrelated tensor operations.Final Answer:
Perform operations on tensors of different shapes by expanding smaller ones -> Option AQuick Check:
Broadcasting = expanding smaller tensor shapes [OK]
- Confusing broadcasting with data type conversion
- Thinking broadcasting splits tensors
- Assuming broadcasting changes tensor storage
(3, 1) to a tensor of shape (3, 4)?Solution
Step 1: Check tensor shapes for broadcasting compatibility
Tensor x has shape (3,1) and y has shape (3,4). Broadcasting works from right to left: 1 and 4 are compatible (1 can expand to 4), and 3 and 3 match.Step 2: Verify each option's shapes and operations
x = torch.randn(3, 1) y = torch.randn(3, 4) z = x + y adds (3,1) + (3,4) correctly. x = torch.randn(3, 1) y = torch.randn(4, 3) z = x + y has incompatible shapes (3,1) + (4,3). x = torch.randn(1, 3) y = torch.randn(3, 4) z = x + y has (1,3) + (3,4) which is incompatible. x = torch.randn(3, 1) y = torch.randn(3, 4) z = y + x.T transposes x to (1,3), making addition incompatible.Final Answer:
x = torch.randn(3, 1)\ny = torch.randn(3, 4)\nz = x + y -> Option DQuick Check:
Broadcasting matches trailing dims: 1 and 4 compatible [OK]
- Mixing up tensor shapes and their order
- Assuming transpose always helps broadcasting
- Ignoring dimension order in broadcasting
import torch x = torch.randn(2, 3, 1) y = torch.randn(1, 3, 4) z = x + y print(z.shape)
Solution
Step 1: Analyze shapes for broadcasting
x shape is (2,3,1), y shape is (1,3,4). Broadcasting compares dimensions from right: 1 and 4 compatible (1 expands to 4), 3 and 3 match, 2 and 1 compatible (1 expands to 2).Step 2: Determine resulting shape
Broadcasted shape is (2,3,4) because dimensions expand to the maximum compatible size.Final Answer:
torch.Size([2, 3, 4]) -> Option AQuick Check:
Broadcasted shape = max dims per axis [OK]
- Ignoring leading dimension broadcasting
- Assuming shapes must be identical
- Thinking 1 cannot expand to larger size
import torch x = torch.randn(4, 1) y = torch.randn(3, 4) z = x + y
What is the error and how to fix it?
Solution
Step 1: Check tensor shapes and broadcasting rules
x shape is (4,1), y shape is (3,4). Broadcasting compares from right: 1 and 4 compatible (1 expands to 4), 4 and 3 incompatible. So addition fails.Step 2: Fix shapes for broadcasting
Reshape x to (3,1) so shapes become (3,1) and (3,4). Now 1 and 4 compatible (1 expands to 4), 3 and 3 match. Addition works.Final Answer:
RuntimeError due to shape mismatch; fix by reshaping x to (3,1) -> Option BQuick Check:
Broadcast dims must be compatible from right [OK]
- Trying to reshape y incorrectly
- Ignoring dimension order in broadcasting
- Assuming transpose fixes all shape errors
a of shape (5, 1, 3) and a tensor b of shape (1, 4, 1). You want to add them using broadcasting and then compute the mean over the last dimension. Which code snippet correctly does this?Solution
Step 1: Verify broadcasting shapes
a shape: (5,1,3), b shape: (1,4,1). Broadcasting compares dims from right: 3 and 1 compatible (1 expands to 3), 1 and 4 compatible (1 expands to 4), 5 and 1 compatible (1 expands to 5). Result shape is (5,4,3).Step 2: Compute mean over last dimension
The last dimension is dim=2 (0-based indexing). So mean(dim=2) computes mean over size 3 dimension, resulting in shape (5,4).Final Answer:
c = a + b\nresult = c.mean(dim=2) -> Option CQuick Check:
Broadcast shapes then mean over last dim (2) [OK]
- Using wrong dimension for mean
- Transposing b unnecessarily
- Confusing dimension indices
Ready to prove it?
Pass the test and this pattern moves unknown
