Bird
Raised Fist0
PyTorchml~20 mins

Reshaping (view, reshape, squeeze, unsqueeze) in PyTorch - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Reshaping Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the shape of tensor after view operation?
Given the following PyTorch code, what will be the shape of tensor `b` after the `view` operation?
PyTorch
import torch
a = torch.randn(2, 3, 4)
b = a.view(3, 8)
Atorch.Size([4, 6])
Btorch.Size([6, 4])
Ctorch.Size([2, 12])
Dtorch.Size([3, 8])
Attempts:
2 left
💡 Hint
Remember that view reshapes the tensor without changing the total number of elements.
❓ Predict Output
intermediate
2:00remaining
What is the output shape after squeeze operation?
What will be the shape of tensor `b` after applying `squeeze` on tensor `a`?
PyTorch
import torch
a = torch.randn(1, 5, 1, 3)
b = a.squeeze()
Atorch.Size([5, 3])
Btorch.Size([1, 5, 3])
Ctorch.Size([5, 1, 3])
Dtorch.Size([1, 5, 1, 3])
Attempts:
2 left
💡 Hint
Squeeze removes all dimensions of size 1.
❓ Model Choice
advanced
2:00remaining
Which operation correctly adds a new dimension at position 2?
You have a tensor `a` with shape (4, 5). Which PyTorch operation will add a new dimension at position 2 (0-based index), resulting in shape (4, 5, 1)?
PyTorch
import torch
a = torch.randn(4, 5)
Aa.unsqueeze(1)
Ba.unsqueeze(2)
Ca.unsqueeze(0)
Da.unsqueeze(-2)
Attempts:
2 left
💡 Hint
Remember that unsqueeze adds a dimension at the specified index.
❓ Hyperparameter
advanced
2:00remaining
Choosing correct reshape parameters for a tensor
You have a tensor `a` with shape (2, 3, 4). You want to reshape it to a 2D tensor with 6 rows. Which of the following reshape calls achieves this without raising an error?
PyTorch
import torch
a = torch.randn(2, 3, 4)
Aa.reshape(3, 8)
Ba.reshape(4, 6)
Ca.reshape(6, -1)
Da.reshape(6, 5)
Attempts:
2 left
💡 Hint
The total number of elements must remain the same after reshape. Use -1 to infer a dimension.
🔧 Debug
expert
2:00remaining
Why does this reshape code raise an error?
Consider the following code snippet. Why does it raise an error?
PyTorch
import torch
a = torch.randn(2, 3, 4)
b = a.view(4, 3, 3)
AThe total number of elements does not match between original and new shape.
Bview cannot change the order of dimensions, only reshape.
CThe new shape must have a dimension of size 1.
Dview requires the tensor to be contiguous, and this tensor is not.
Attempts:
2 left
💡 Hint
Check the total number of elements in both shapes.

Practice

(1/5)
1. What does the torch.squeeze() function do to a tensor?
easy
A. Adds a new dimension of size 1 at a specified position
B. Removes all dimensions of size 1 from the tensor
C. Changes the tensor's data without changing its shape
D. Flattens the tensor into a 1D vector

Solution

  1. Step 1: Understand the purpose of squeeze

    torch.squeeze() removes dimensions that have size 1, effectively reducing unnecessary dimensions.
  2. Step 2: Differentiate from other reshape functions

    Unlike unsqueeze which adds size 1 dims, squeeze removes them without changing data.
  3. Final Answer:

    Removes all dimensions of size 1 from the tensor -> Option B
  4. Quick Check:

    squeeze removes size 1 dims = B [OK]
Hint: Squeeze removes dims with size 1, like cleaning empty boxes [OK]
Common Mistakes:
  • Confusing squeeze with unsqueeze
  • Thinking squeeze changes data values
  • Assuming squeeze flattens the tensor
2. Which of the following is the correct syntax to add a new dimension at position 0 using PyTorch?
easy
A. tensor.unsqueeze(0)
B. tensor.unsqueeze(1)
C. tensor.squeeze(0)
D. tensor.reshape(0)

Solution

  1. Step 1: Recall unsqueeze syntax

    unsqueeze(dim) adds a dimension of size 1 at the specified dim index.
  2. Step 2: Identify correct dimension index

    To add at position 0 (the front), use unsqueeze(0). tensor.unsqueeze(1) adds at position 1, C squeezes, D is invalid.
  3. Final Answer:

    tensor.unsqueeze(0) -> Option A
  4. Quick Check:

    unsqueeze(0) adds dim at front = A [OK]
Hint: unsqueeze(dim) adds size 1 dim at dim index [OK]
Common Mistakes:
  • Using squeeze instead of unsqueeze
  • Passing wrong dimension index
  • Using reshape with a single integer argument
3. Given the tensor t = torch.randn(2, 1, 3), what is the shape after t.view(2, 3)?
medium
A. (2, 3)
B. (2, 1, 3)
C. (1, 6)
D. RuntimeError due to incompatible shape

Solution

  1. Step 1: Understand original tensor shape

    Tensor t has shape (2, 1, 3), total elements = 2*1*3 = 6.
  2. Step 2: Check if view(2, 3) is compatible

    New shape (2, 3) also has 6 elements, so view can reshape without error.
  3. Final Answer:

    (2, 3) -> Option A
  4. Quick Check:

    view reshapes without changing total elements = A [OK]
Hint: view reshapes if total elements match exactly [OK]
Common Mistakes:
  • Confusing view with squeeze or unsqueeze
  • Assuming view changes data order
  • Trying incompatible shapes causing runtime error
4. What is wrong with this code snippet?
import torch
t = torch.randn(3, 1, 4)
t = t.view(3, 3, 1, 1)
medium
A. The new shape has more elements than original tensor
B. view cannot add new dimensions, only reshape existing ones
C. view requires contiguous tensor, but t is not contiguous
D. The new shape is incompatible with the total number of elements

Solution

  1. Step 1: Calculate original tensor elements

    Original shape (3,1,4) has 3*1*4 = 12 elements.
  2. Step 2: Calculate new shape elements

    New shape (3,3,1,1) has 3*3*1*1 = 9 elements, which does not match.
  3. Final Answer:

    The new shape is incompatible with the total number of elements -> Option D
  4. Quick Check:

    view fails if total elements don't match = C [OK]
Hint: Check total elements before view; must match exactly [OK]
Common Mistakes:
  • Assuming view cannot add dimensions
  • Confusing contiguous memory errors
  • Miscounting total elements
5. You have a tensor x of shape (4, 1, 28, 28). You want to prepare it for a fully connected layer that expects input shape (4, 784). Which sequence of PyTorch operations correctly reshapes x without changing data order?
hard
A. x = x.view(4, 28, 28)
B. x = x.unsqueeze(1).view(4, 1, 784)
C. x = x.squeeze(1).view(4, 784)
D. x = x.reshape(4, 1, 784)

Solution

  1. Step 1: Understand original tensor shape

    x has shape (4, 1, 28, 28). The middle dimension is size 1, which is unnecessary for flattening.
  2. Step 2: Remove the size 1 dimension

    Use squeeze(1) to remove the dimension of size 1 at index 1, resulting in shape (4, 28, 28).
  3. Step 3: Flatten the last two dimensions

    Use view(4, 784) to reshape (4, 28, 28) into (4, 784) without changing data order.
  4. Final Answer:

    x = x.squeeze(1).view(4, 784) -> Option C
  5. Quick Check:

    Remove size 1 dim then flatten = D [OK]
Hint: Squeeze first to remove size 1 dims, then view to flatten [OK]
Common Mistakes:
  • Trying to view directly without squeezing
  • Using unsqueeze unnecessarily
  • Confusing reshape and view effects
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard