I'm trying to use the function torch.conv2d from Pytorch but can't get a result I understand...
Here is a simple example where the kernel (
filt) is the same size as the input (
im) to explain what I'm looking for.
import pytorch filt = torch.rand(3, 3) im = torch.rand(3, 3)
I want to compute a simple convolution with no padding, so the result should be a scalar (i.e. a 1x1 tensor).
I tried this with
# I have to convert image and kernel to 4 dimensions tensors to use conv2d im_torch = im.reshape((im_height, filt_height, 1, 1)) filt_torch = filt.reshape((filt_height, im_height, 1, 1)) out = torch.nn.functional.conv2d(im_torch, filt_torch, stride=1, padding=0) print(out)
But the result is not what I expected:
tensor([[[[0.6067]], [[0.3564]], [[0.5397]]], [[[0.2557]], [[0.0493]], [[0.2562]]], [[[0.6067]], [[0.3564]], [[0.5397]]]])
To give an idea of what I'd like, I want to reproduce scipy
import scipy.signal out_scipy = scipy.signal.convolve2d(im.detach().numpy(), filt.detach().numpy(), 'valid') print(out_scipy)