What’s the blocking issue?
Since we have the ConvNd function, why can’t we implement a 4d convolution just like the others? Why not n-dimensional?
From the Python side, all the convolution layers ultimately delegate to that ConvNd function. Nothing seems special cased for any particular kernel shape.
I think the C++ side is implemented at torch/csrc/autograd/functions/convolution.{h,cpp}. The forward pass has a special case when n=3, but all it seems to do is reshape the kernel by adding/removing dummy dimensions. I’m not entirely sure why though. Perhaps it could be easily generalized? I’m a bit out of my element with these low-level details, so I may be missing something.