# How to reshape tensor in a right way?

How to reshape `torch.Size([2, 3, 4, 5])` to `torch.Size([2, 5, 3, 4])` and then get back to `torch.Size([2, 3, 4, 5])`?
In my case `torch.Size([batch_size, x_dim, y_dim, 3_RGB])`. I need convert to` torch.Size([batch_size, 3_RGB, x_dim, y_dim])` and use it with CNN layer and then get back to original size: `torch.Size([batch_size, x_dim, y_dim, 3_RGB])`

For example,

``````x = torch.rand(2,3,4,5) # now x.shape is torch.Size([2, 3, 4, 5])
y = x.permute(0,3,1,2) # now y.shape is torch.Size([2, 5, 3, 4])
# which means: take the x's dimension 0,3,1,2 to be y's dimension 0,1,2,3
# i.e. x's dimension 0 is 2; dimension 1 is 3; dimension 2 is 4; dimension 3 is 5.
# so x's dimension 0,3,1,2 would be 2,5,3,4.
z = y.permute(0,2,3,1) # now z.shape is torch.Size([2, 4, 3, 5])
``````
1 Like