Bird
Raised Fist0
PyTorchml~12 mins

Reshaping (view, reshape, squeeze, unsqueeze) in PyTorch - Model Pipeline Trace

Choose your learning style10 modes available
Model Pipeline - Reshaping (view, reshape, squeeze, unsqueeze)

This pipeline shows how a tensor changes shape using PyTorch functions: view, reshape, squeeze, and unsqueeze. These operations help prepare data for models by changing dimensions without altering data values.

Data Flow - 5 Stages
1Input Tensor
1 row x 12 columns→Start with a 1D tensor of 12 elements→1 row x 12 columns
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
↓
2Reshape to 3x4
1 row x 12 columns→Use reshape(3,4) to make 3 rows and 4 columns→3 rows x 4 columns
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
↓
3View as 4x3
3 rows x 4 columns→Use view(4,3) to change shape to 4 rows and 3 columns→4 rows x 3 columns
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
↓
4Unsqueeze dimension
4 rows x 3 columns→Add a new dimension at position 1 using unsqueeze(1)→4 rows x 1 x 3 columns
[[[1, 2, 3]], [[4, 5, 6]], [[7, 8, 9]], [[10, 11, 12]]]
↓
5Squeeze dimension
4 rows x 1 x 3 columns→Remove the dimension of size 1 at position 1 using squeeze(1)→4 rows x 3 columns
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
Training Trace - Epoch by Epoch
Loss
0.5 |****
0.4 |****
0.3 |***
0.2 |**
0.1 |*
    +---------
     1 2 3 4 5 Epochs
EpochLoss ↓Accuracy ↑Observation
10.450.60Initial training with original tensor shape
20.350.70After reshaping, model learns better structure
30.280.78Continued improvement with correct input shape
40.220.83Loss decreases steadily, accuracy rises
50.180.87Model converges well with reshaped data
Prediction Trace - 5 Layers
Layer 1: Input tensor
Layer 2: reshape(3,4)
Layer 3: view(4,3)
Layer 4: unsqueeze(1)
Layer 5: squeeze(1)
Model Quiz - 3 Questions
Test your understanding
What does the PyTorch function 'unsqueeze' do to a tensor?
AChanges the order of elements in the tensor
BRemoves all dimensions of size 1
CAdds a dimension of size 1 at a specified position
DFlattens the tensor into 1D
Key Insight
Reshaping tensors correctly is crucial for machine learning models to understand data structure. Functions like view, reshape, squeeze, and unsqueeze let us change tensor shapes without changing data, enabling smooth data flow through models.

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