Given filters F1, F2 … Fn and a 4D input tensor ([batchsize, channels, height, width]), input, I want to apply all filters over all channels of input individually. If input has c channels, then the output of this operation should be a tensor, say t, of dimensions [c, input.size(0), n, outputHeightAfterConv(input.size(2)), outputWidthAfterConv(input.size(3))]. Note that t[i, :, :, :, :] should be equal to the result of applying convolutions from n filters on channel i of input. Below is my attempt to solve the problem. But because I loop through all channels to get the output, my backward pass over this part takes incredibly long.
conv = torch.nn.Conv2d(1, out_channels, kernel_size, stride, padding, dilation, groups, bias)
temp = torch.empty(x.size(1), x.size(0), self.outChannels, self.getOutputHeight(x.size(2)), self.getOutputWidth(x.size(3)))
for i in range(0, x.size(1)): #loop over number of channels
temp[i, :, :, :, :] = conv(x[:, i:i+1, :, :])
I have been stuck on this problem for a very long time and am a beginner in PyTorch. Any help would be tremendously appreciated