我一直在尝试实现一个简单的卷积神经网络。但是我已经被这个问题困扰了一个多星期。
具体来说,假设一个卷积通道中有 3 层,l-1, l, l+1 -layer
分别标记为。l-1
层为输入层,形状为形状,(num_channels, img_height, img_width)
层l
为卷积层,形状为核(num_kernels, num_channels, filter_height, filter_width)
,l+1
层为池化层,池化大小为(pool_height, pool_width)
。请注意,在我的简单实现中,过滤器是 3 维的,它们与输入具有相同的深度,即它们具有与输入相同的通道数。
在这个设置上,我在反向传播阶段遇到了一个问题。
我研究了许多关于神经网络的教程,但是,似乎所有教程都停止了将错误反向传播到l
公式层:
l
问题是,我应该如何从层到层
反向传播误差l-1
,即计算,为了将几个 conv-pooling pass 链接在一起?
在我的实现中,有一个类被调用ConvPoolLayer
,它有一个feedforward
方法和一个backprop
方法。该方法backprop
需要将错误从输出传播到输入。当我将瞬间链接class ConvPoolLayer
在一起时,我只需要将它们的feedforward
方法和backprop
方法分别训练在一起。