How to Fix "Cannot Broadcast Tensors" in PyTorch

Broadcasting requires dimensions to match from the right. Use .unsqueeze() to add dimensions. Example: (3,4) + (4,) works, but (3,4) + (3,) fails because the rightmost dimensions 4 and 3 don't match.

Broadcasting Rules

Two dimensions are compatible when:

  1. They are equal, or
  2. One of them is 1

Dimensions are compared from right to left:

# Works: rightmost dims match
(3, 4) + (4,)   -> (3, 4)  ✓ 4==4
(3, 4) + (1, 4)  -> (3, 4)  ✓ 4==4, 1 broadcasts to 3
(2, 3, 4) + (4,)  -> (2, 3, 4) ✓ 4==4

# Fails: rightmost dims don't match
(3, 4) + (3,)   -> ERROR   ✗ 4!=3
(2, 3) + (2,)   -> ERROR   ✗ 3!=2

Fix, Use unsqueeze()

a = torch.randn(3, 4)  # shape (3, 4)
b = torch.randn(3)    # shape (3,)

# a + b # ERROR: (3,4) + (3,) — 4 != 3

# Fix: add a dimension to make (3,) -> (3, 1)
b = b.unsqueeze(-1)    # shape (3, 1)
result = a + b       # (3, 4) + (3, 1) -> (3, 4) ✓

Common Patterns

# Add bias per channel to image: (batch, C, H, W) + (C,)
bias = torch.randn(64)           # (64,)
bias = bias.unsqueeze(0).unsqueeze(-1).unsqueeze(-1) # (1, 64, 1, 1)
# or more concisely:
bias = bias.view(1, -1, 1, 1)       # (1, 64, 1, 1)
output = features + bias          # broadcasts ✓

# Scale per sample: (batch, features) * (batch,)
weights = torch.randn(32)         # (32,)
weights = weights.unsqueeze(-1)      # (32, 1)
result = data * weights           # (32, 128) * (32, 1) -> (32, 128) ✓
Try the Broadcast Error Solver
By the same builder: GitHub, theluckystrike BeLikeNative, Grammar AI EarlyThunder, Dev Blog Bug Bounty Reality Zovo, AI Dev Tools