One thing that confuses me about CNN is that I cannot tell when something is designed based on calculation versus when something is (arbitrary) design choice (no need for calculation).
My question is very simple:
What do you actually need to calculate in order to design a convolutional neural network, or are all the parameters basically just design choices?
For example, in Pytorch, a conv block looks something like
where by the parameter inside are things like the number of channels in the input image, number of channels produced by conv layer, size of the kernel, stride, and padding.
The number of channels is already known to us.
Kernel, stride, padding and the number of channels produced by the conv layer (width of the conv layer) are all design choices. It is not going to make or break or design if we choose a 4x4 filter vs 5x5.
So it seems to me that you don't really need to calculate anything in order to design a CNN, and all the parameters are basically design choices.
Is this correct or am I missing something?
As another example, suppose I want to design a CNN for MNIST classification. All I know is that my images are 28 by 28, with 1 channel. Is there any thing with our input parameters (28x28x1) that guides or influence the design of our network?