Solved by ptrblck in post #2 
              
              
                The second use case is actually a vanilla convolution and you can check the kernel shape via: 
print(nn.Conv2d(3, 1, 3).weight.shape)
> torch.Size([1, 3, 3, 3]) # out_channels, in_channels, height, width

Have a look at CS231n - Convolution layers, which describes the underlying method quite well.