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