обратное распространение между полностью связанным слоем и слоем свертки? - PullRequest
0 голосов
/ 13 января 2020

Это простой пример сети, состоящей из двух сверточных слоев и одного полностью связного слоя.

      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, я просто хочу понять, почему размер градиента не соответствует размеру фильтра.

...