I am trying to do depthwise convolution with a fixed kernel. My kernel is 2D, and I want to use the same 2D kernel for all channles. This is what I am currently doing(code modified from antialiased-cnns):
x = torch.randn([32, 256, 64, 64]) lpf = torch.tensor([[1., 2., 1.], [2., 4., 2.], [1., 2., 1.]]) lpf = lpf/torch.sum(lpf) lpf = lpf.unsqueeze(dim=0).unsqueeze(dim=0) lpf = lpf.repeat([self.channels, 1, 1, 1]) y = F.conv2d(input=x, weight=self.lpf, padding=1, groups=self.channels)
While this works correctly, I was wondering if I could somehow get rid of the
lpf.repeat() command. Is there a way to broadcast the operation that doesn’t reqiure explicit
.repeat() operation ?