I am trying to implement CNN using python Numpy.
I searched so much, but all I found was for one filter with one channel for Convolution.
Suppose we have an X as Image with this shape:
(N_Height, N_Width, N_Channel) = (5,5,3)
And Let's say I have
16 filters with this shape:
(F_Height, F_Width, N_Channel) = (3,3,3) ,
Output shape after conv2d will be
math.floor((N_Height - F_Height + 2*padding)/stride + 1 )),
math.floor((N_Width- F_Width + 2*padding)/stride + 1 )),
So the output of this layer will be an array with this shape:
(Height, Width, Channel) = (3, 3, 16)
Suppose $dL/dh$ is the input for my layer in backpropagation with this shape:
Now I must find $dL/dw$ and $dL/dx$: $dL/dw$ to update my filters params and $dL/dx$ to pass it as input to the previous layer as Loss respect to the input X.
From this answer Error respect to filters weights I found how to calculate $dL/dw$.
The problem I have in BackPropagation is I don't know how to calculate $dL/dx$ having this shape:
(5,5,3) and pass it to the prev layer.
I read lots of articles in Medium and other sites but I don't get how to calculate it:
How Backpropagation works in a CNN
The best explanation of Convolutional Neural Networks on the Internet!
Backpropagation In Convolutional Neural Networks
How to propagate error back to previous layer in CNN?
Thanks in advance :)