Say you had a 3D tensor (batch size = 1):
a = torch.rand(1,3,6,6)
and you wanted to smooth that tensor along the channel axis (i.e. axis 1), with a Gaussian kernel, without smoothing along the 2nd and 3rd axes, how would one do this?
I’ve seen similar 1 separate posts 1 to this whereby you create a Gaussian kernel of specified size and then convolve your tensor using torch.nn.Conv3D(a, kernel).
However, this is a 3D tensor so I assume you would have to create your kernel as a 3D Gaussian where 2 of the axes are simply ones while the third follows a Gaussian function.
Could someone please show me how to do this correctly within a network (this is an assumption that the innit function contains convolutional layers being instantiated in the following way as
self.conv0 = torch.nn.Conv2d(120,16,3,1,padding=1)
self.conv1 = torch.nn.Conv2d(16,32,3,1,padding=1)
etc. and that you would like to perform this convolution as part of the forward procedure in the network).
Many thanks in advance for help on this!
Edit for clarity: like in this post 1, my initial attempts to do this involved modifying the kernel to look as follows:
self.kernel = torch.FloatTensor([[[0.006, 0.061, 0.242, 0.383, 0.242, 0.061, 0.006],
                                          [1., 1., 1., 1., 1., 1., 1.],
                                          [1., 1., 1., 1., 1., 1., 1.]]])