Bird
Raised Fist0
PyTorchml~10 mins

Reshaping (view, reshape, squeeze, unsqueeze) in PyTorch - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to reshape a tensor of shape (4, 3) into (2, 6) using PyTorch.

PyTorch
import torch
x = torch.randn(4, 3)
y = x.[1](2, 6)
print(y.shape)
Drag options to blanks, or click blank then click option'
Aview
Breshape
Csqueeze
Dunsqueeze
Attempts:
3 left
💡 Hint
Common Mistakes
Using squeeze or unsqueeze which add or remove dimensions instead of reshaping.
Using reshape without understanding the difference with view.
2fill in blank
medium

Complete the code to add a new dimension at position 1 to a tensor of shape (3, 4).

PyTorch
import torch
x = torch.randn(3, 4)
y = x.[1](1)
print(y.shape)
Drag options to blanks, or click blank then click option'
Aview
Bsqueeze
Cunsqueeze
Dreshape
Attempts:
3 left
💡 Hint
Common Mistakes
Using squeeze which removes dimensions instead of adding.
Using view or reshape which change shape but do not add singleton dimensions.
3fill in blank
hard

Fix the error in the code to remove all dimensions of size 1 from the tensor.

PyTorch
import torch
x = torch.randn(1, 3, 1, 5)
y = x.[1]()
print(y.shape)
Drag options to blanks, or click blank then click option'
Areshape
Bsqueeze
Cview
Dunsqueeze
Attempts:
3 left
💡 Hint
Common Mistakes
Using unsqueeze which adds dimensions instead of removing.
Using view or reshape which do not remove singleton dimensions automatically.
4fill in blank
hard

Fill both blanks to reshape a tensor and then add a new dimension at the end.

PyTorch
import torch
x = torch.randn(6, 4)
y = x.[1](3, 8).[2](-1)
print(y.shape)
Drag options to blanks, or click blank then click option'
Areshape
Bunsqueeze
Csqueeze
Dview
Attempts:
3 left
💡 Hint
Common Mistakes
Using squeeze instead of unsqueeze to add a dimension.
Using view instead of reshape which may fail if tensor is not contiguous.
5fill in blank
hard

Fill all three blanks to create a dictionary with keys as the tensor's dimension sizes and values as the dimension indices, but only for dimensions larger than 1.

PyTorch
import torch
x = torch.randn(1, 5, 1, 7)
result = {x.shape[[1]]: [2] for [3] in range(len(x.shape)) if x.shape[[1]] > 1}
print(result)
Drag options to blanks, or click blank then click option'
Ai
Dj
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variables for indexing and looping causing errors.
Using a variable not defined in the loop.

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