Which part of Pytorch tensor represents channels?

Rohan Singh picture Rohan Singh · Jul 26, 2018 · Viewed 8.3k times · Source

Surprisingly I have not found an answer to this question after looking around the internet. I am specifically interested in a 3d tensor. From doing my own experiments, I have found that when I create a tensor:

h=torch.randn(5,12,5)

And then put a convolutional layer on it defined as follows:

conv=torch.nn.Conv1d(12,48,3,padding=1)

The output is a (5,48,5) tensor. So, am I correct in assuming that for a 3d tensor in pytorch the middle number represents the number of channels?

Edit: It seems that when running a conv2d, the input dimension is the first entry in the tensor, and I need to make it a 4d tensor (1,48,5,5) for example. Now I am very confused...

Any help is much appreciated!

Answer

Umang Gupta picture Umang Gupta · Jul 26, 2018

For a conv2D, input should be in (N, C, H, W) format. N is the number of samples/batch_size. C is the channels. H and W are height and width resp.

See shape documentation at https://pytorch.org/docs/stable/nn.html#torch.nn.Conv2d

For conv1D, input should be (N,C,L) see documentation at https://pytorch.org/docs/stable/nn.html#conv1d