Hi I am new to pytorch , I just wanted to convert 1 dimensional tensor to 2 dimensional tensor but when I use tensor.view() it my code still throws a dimensionality problem.please help
You can’t change the number of elements in the tensor, so you’re likely calculating the dimensions wrong. If you have a 100 element tensor, you can’t view it to x.view(20,10) because that would require you to have 20*10=200 elements. Try just taking a 100 element tensor and running x.view(1,100,1) and you’ll see how you can arbitrarily add dimensions.
If it’s a tensor and not a variable you can also use unsqueeze to add a dummy dimension
I have done like this before:
import torch
x_train = torch.linspace(-1, 1, 101) # 1D tensor
print(x_train.size())
# torch.Size([101])
x_train = x_train.view(101, 1) # convert to 2D tensor
print(x_train.size())
# torch.Size([101, 1])
If you have a tensor img
with a size
torch.Size([784])
and you want to convert it to a size of
torch.Size([1, 784])
you can call the resize_
method like below:
img.resize_(1, 784)
I would consider the usage of resize_
to be dangerous and applicable for advanced use cases, and would thus recommend to use tensor.view(1, -1)
or tensor.unsqueeze(0)
for this use case.
From the docs of resize_
:
This is a low-level method. The storage is reinterpreted as C-contiguous, ignoring the current strides (unless the target size equals the current size, in which case the tensor is left unchanged). For most purposes, you will instead want to use
view()
, which checks for contiguity, orreshape()
, which copies data if needed. To change the size in-place with custom strides, seeset_()
.