Это простой пример сети, состоящей из двух сверточных слоев и одного полностью связного слоя.
input = 15x15
con_1 = 5x5 // filter size
con_2 = 3x3 // filter size
fc = 10x81
// forward pass
out_1 = convolution(input,con_1) = 11x11
out_2 = convolution(out_1,con_2 = 9x9
out_3 = matrix multiplication(fc,out_2)
// backward pass
fc_err = err from fully connected layer
con_2_err = convolution(filter con_2,fc_err)// result 10x10
gradient = convolution(out_1,con_2_err) // result 2x2`
После того, как я обнаружил ошибку на уровне f c, я должен передать ее в conv_2 уровень свертки. Меня беспокоит то, что ошибка имеет размер 10x1, а фильтр con_2 имеет размер 3x3. Так и должно быть? Если так, то мне нужно довести размер фильтра 3х3 до 10х10, и тогда результатом свертки будет матрица 10х10. Градиент для слоя con_2 будет результатом свертки out_1 и con_2_err, что даст матрицу 2x2. Чтобы обновить вес фильтра con_2, мне нужен градиент 3х3. Что я делаю неправильно ? Извините за большой текст и мой Engli sh, я просто хочу понять, почему размер градиента не соответствует размеру фильтра.