Ah OK, yeah your explanation is right. The filter shapes is only defined by the number of kernels, the input channels, as well as the spatial size of the kernels and is thus independent from the batch size. This allows you to create models accepting different batch sizes (e.g. during training you could use a larger batch size while the deployed model could accept a single image).
Also yes, the better approach would be to use a small eps value or torch.allclose.