更改神经网络卷积层中过滤器的权重

时间:2018-11-29 13:22:53

标签: c# neural-network conv-neural-network backpropagation

我研究了卷积神经网络的工作架构。在实施过程中,我遇到了过滤器权重变化的问题。

为简单起见,请考虑以下层结构:

    +-----------------------------------+
    |        Input image volume         |
    |               HxWxD               |
    +-----------------------------------+
                       |
    +-----------------------------------+
    |         Convolution layer         |
    |                                   |
    |      in: HxWxD, out: H1xW1xD1     |
    |                                   |
    |     K filters with size FxFxD     |
    |    S - stride, P - zero padding   |
    |    H1 = (H - F + 2P) / S + 1      |
    |    W1 = (W - F + 2P) / S + 1      |
    |              D1 = K               |
    +-----------------------------------+
                       |
    +-----------------------------------+
    |             ReLU layer            |
    |                                   |
    |    in: H1xW1xD1, out: H2xW2xD2    |
    |                                   |
    |     H2 = H1, W2 = W1, D2 = D1     |
    +-----------------------------------+
                       |
    +-----------------------------------+
    |          Maxpooling layer         |
    |                                   |
    |    in: H2xW2xD2, out: H3xW3xD3    |
    |                                   |
    |            scale [= 2]            |
    |          H3 = H2 / scale          |
    |          W3 = W2 / scale          |
    |              D3 = D2              |
    +-----------------------------------+
                       |
         [convert volume to vector]
         [W3xH3xD3 -> W3*H3*D3 = N]         
                       |
    +-----------------------------------+
    |        Full connected layer       |
    |                                   |
    |           in: N, out: M           |
    |                                   |
    |           W: matrix MxN           |
    |         activate: sigmoid         |
    +-----------------------------------+
                       |

为进一步简化,请考虑32x32 RGB图像的示例。

输入音量将为32x32x3 在卷积层中,我们将使用K = 4个大小为5x5x3的滤波器,其中S = 1,P = 0,也就是说,通过将输入体积与每个体积进行卷积,来自32x32x3体积的图层将收到28x28x4体积。 K个过滤器。 ReLU层将重置卷中的所有负数并将其返回,因此输出将再次为28x28x4层 具有乘数2的Maxpooling层会将体积28x28x4变成体积14x14x4 一个完全连接的层将在输入处接收一个14 * 14 * 4 = 784个元素的向量,将其乘以矩阵W = [10x784](我们将识别10个类别),将接收一个包含值的10个元素的向量从0到1(由S型激活)。 之后,我们找到误差向量e,然后将转置矩阵W与向量e相乘,然后传播回误差向量e,并通过与将体积转换为向量相同的方式依次输入来将其转换为14x14x4的体积。

maxpooling的层将返回体积28x28x4,其中非最大值元素以及最大值为体积14x14x4的对应值的元素将为零。

ReLU层将每个元素乘以1或0,具体取决于在输出端获得的是正数还是负数,然后返回相同的层28x28x4。

问题来了。为了获得权重的变化,有必要对输入体积32x32x3与体积28x28x4进行卷积,而以某种方式获得4体积的5x5x3。假设将增量体积分成4个体积28x28x1,但是又如何获得5x5x3(而不是5x5x1)的权重呢?

再次简短地:

转发:[32x32x3] =>带4个滤镜的卷积[5x5x3] => [28x28x4] => ReLu => [28x28x4] => maxpooling => [14x14x4] => vectorize => [784] => W * X => [10]

后退:[10] => W ^ T * e => [784] =>'volumize'=> [14x14x4] =>解池=> [28x28x4] => * relu grad => [28x28x4] => ???

0 个答案:

没有答案