view() reshapes the tensor without copying memory, similar to numpy's reshape().

Given a tensor a with 16 elements:

import torch
a = torch.range(1, 16)

To reshape this tensor to make it a 4 x 4 tensor, use:

a = a.view(4, 4)

Now a will be a 4 x 4 tensor. Note that after the reshape the total number of elements need to remain the same. Reshaping the tensor a to a 3 x 5 tensor would not be appropriate.

What is the meaning of parameter -1?

If there is any situation that you don't know how many rows you want but are sure of the number of columns, then you can specify this with a -1. (Note that you can extend this to tensors with more dimensions. Only one of the axis value can be -1). This is a way of telling the library: "give me a tensor that has these many columns and you compute the appropriate number of rows that is necessary to make this happen".

This can be seen in this model definition code. After the line x = self.pool(F.relu(self.conv2(x))) in the forward function, you will have a 16 depth feature map. You have to flatten this to give it to the fully connected layer. So you tell PyTorch to reshape the tensor you obtained to have specific number of columns and tell it to decide the number of rows by itself.

Answer from Kashyap on Stack Overflow
Top answer
1 of 9
465

view() reshapes the tensor without copying memory, similar to numpy's reshape().

Given a tensor a with 16 elements:

import torch
a = torch.range(1, 16)

To reshape this tensor to make it a 4 x 4 tensor, use:

a = a.view(4, 4)

Now a will be a 4 x 4 tensor. Note that after the reshape the total number of elements need to remain the same. Reshaping the tensor a to a 3 x 5 tensor would not be appropriate.

What is the meaning of parameter -1?

If there is any situation that you don't know how many rows you want but are sure of the number of columns, then you can specify this with a -1. (Note that you can extend this to tensors with more dimensions. Only one of the axis value can be -1). This is a way of telling the library: "give me a tensor that has these many columns and you compute the appropriate number of rows that is necessary to make this happen".

This can be seen in this model definition code. After the line x = self.pool(F.relu(self.conv2(x))) in the forward function, you will have a 16 depth feature map. You have to flatten this to give it to the fully connected layer. So you tell PyTorch to reshape the tensor you obtained to have specific number of columns and tell it to decide the number of rows by itself.

2 of 9
92

view() reshapes a tensor by 'stretching' or 'squeezing' its elements into the shape you specify:


How does view() work?

First let's look at what a tensor is under the hood:

Tensor and its underlying storage e.g. the right-hand tensor (shape (3,2)) can be computed from the left-hand one with t2 = t1.view(3,2)

Here you see PyTorch makes a tensor by converting an underlying block of contiguous memory into a matrix-like object by adding a shape and stride attribute:

  • shape states how long each dimension is
  • stride states how many steps you need to take in memory til you reach the next element in each dimension

view(dim1,dim2,...) returns a view of the same underlying information, but reshaped to a tensor of shape dim1 x dim2 x ... (by modifying the shape and stride attributes).

Note this implicitly assumes that the new and old dimensions have the same product (i.e. the old and new tensor have the same volume).


PyTorch -1

-1 is a PyTorch alias for "infer this dimension given the others have all been specified" (i.e. the quotient of the original product by the new product). It is a convention taken from numpy.reshape().

Hence t1.view(3,2) in our example would be equivalent to t1.view(3,-1) or t1.view(-1,2).

🌐
PyTorch
docs.pytorch.org › reference api › tensor views
Tensor Views — PyTorch main documentation
PyTorch allows a tensor to be a View of an existing tensor. View tensor shares the same underlying data with its base tensor.
🌐
GeeksforGeeks
geeksforgeeks.org › python › how-does-the-view-method-work-in-python-pytorch
How Does the "View" Method Work in Python PyTorch? - GeeksforGeeks
July 23, 2025 - The data in the tensor remains unchanged, but the dimensions are rearranged according to the shape you specify. Reshape Without Copying: .view() reshapes the tensor without changing the data or creating a copy of the tensor's data.
🌐
Medium
medium.com › analytics-vidhya › pytorch-contiguous-vs-non-contiguous-tensor-view-understanding-view-reshape-73e10cdfa0dd
[Pytorch] Contiguous vs Non-Contiguous Tensor / View — Understanding view(), reshape()…
February 26, 2024 - If you change the data in the original tensor x, it also reflects in the view tensor y, because instead of creating another copy of the original tensor x, the view tensor y is reading the data from the same memory address as of the original tensor x.
🌐
Codecademy
codecademy.com › docs › pytorch › tensors › .view()
PyTorch | tensors | .view() | Codecademy
November 9, 2024 - The .view() method in PyTorch reshapes a tensor without altering its underlying data, provided the total number of elements remains the same.
🌐
Medium
medium.com › @abhizc › pytorch-tensor-views-ba6e0a84e1aa
Pytorch Tensor Views. Pytorch is a popular Deep learning… | by Abhishek c | Medium
June 13, 2020 - The view function is used to change the shape of the self tensor, which still has the same data of the self tensor with different shape.
Find elsewhere
🌐
AMD ROCm
rocm.docs.amd.com › projects › composable_kernel › en › latest › conceptual › ck_tile › tensor_views.html
Tensor Views - Multi-Dimensional Structure — Composable Kernel 1.2.0 Documentation
TensorView presents different logical views of the same underlying memory without copying data. A single memory region can be viewed as a row-major matrix, a column-major matrix, or a transposed matrix, using different TensorView configurations.
🌐
ProjectPro
projectpro.io › recipes › what-is-use-of-tensor-view
What is the use of tensor view -
August 3, 2022 - The torch.view allows us to be a View of a existing tensor. With its base tensor the View shares the same underlying data. Explicitly data copying is avoided by supporting the view which will allow us for memory efficient and fast data reshaping, ...
🌐
Medium
mr-amit.medium.com › pytorch-view-vs-reshape-a-practical-guide-74bf31eec210
PyTorch view() vs reshape(): A Practical Guide | by It's Amit | Medium
March 6, 2025 - Efficiency: view() doesn’t copy data. Instead, it creates a new “view” of the same underlying data, making it both memory and computationally efficient. Contiguity Requirement: It works only when the tensor is contiguous in memory.
🌐
Medium
medium.com › @sfarrukhm › demystifying-pytorch-tensors-the-complete-guide-to-views-memory-layout-and-gradient-tracking-865197664ee4
Demystifying PyTorch Tensors: The Complete Guide to Views, Memory Layout, and Gradient Tracking | by Muhammad Farrukh Mehmood | Medium
September 25, 2025 - Instead of smoothly reading 1→2→3→4→5→6 in sequence, PyTorch has to follow this jumping pattern: 1→4→2→5→3→6. This non-sequential access is what makes the tensor non-contiguous. This is why transpose operations are so fast — no data copying occurs, just a change in how we navigate through the existing memory layout. This is where the magic really happens, and where you can make your code either blazingly fast or surprisingly slow. Views are PyTorch’s way of reinterpreting the same memory with a different shape or stride.
🌐
PyTorch Forums
discuss.pytorch.org › t › how-tensor-view-works › 223047
How Tensor.view works? - PyTorch Forums
September 12, 2025 - I’m looking into a more deep explanations about how Tensor.view works, looking into old forums it doesn’t allow non contiguous tensors, but now acording to documentation and what I’ve been playing it seems it does with s…
🌐
Sprintchase
sprintchase.com › home › how to use pytorch view() method
How to Use PyTorch view() Method
May 12, 2025 - The view() method in PyTorch reshapes a contiguous tensor without copying data, offering an efficient way to adjust dimensions.
🌐
MyScale
myscale.com › blog › torch-reshape-vs-torch-view-pytorch
Mastering PyTorch Reshape: A Comprehensive Guide
April 24, 2024 - This mechanism allows for seamless transformations of tensor shapes while maintaining data integrity and coherence across various dimensions. Unlike torch.reshape, which may resort to copying data under certain conditions, torch.view primarily focuses on creating views pointing to the original tensor's memory storage (opens new window).