在CNN中更新过滤器权重

时间:2019-06-04 06:59:55

标签: filter conv-neural-network mask backpropagation

我设计了具有2个卷积层和2个完全连接层的CNN。

我的CNN的体系结构如下:

Input -> [Conv1->ReLU->Pool] -> [Conv2->ReLU->Pool] -> FC1 -> FC2 -> output

28x28   28x28         14x14      14x14           7x7     49x1   49x1    10x1  

在训练CNN时,我进行了反向传播,直到完全连接层为止。如果不更新过滤器,我的准确率将达到94%左右,但是我需要更新过滤器才能发挥全部功能。

我无法弄清楚如何将错误从FC层传播到conv层的过滤器中。

我提到过各种消息来源,但没有一个能真正帮助我。如何将错误从49x49 FC层传播到转换层中的3x3过滤器?

有人可以帮我吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

与完全连接的层相同,但是使用卷积而不是矩阵乘法。假设您位于第5层(L5)。在反向传播期间,您有一个在L6处计算出的增量矩阵,我们称其为D6。在L5中,您有2个任务...您需要计算将用于更新过滤器的dF,并且需要计算将在L4中用作增量的D5。

您是如何在密集层中执行这些操作的?好吧,对于dW,您将层输入与增量相乘,而对于下一个增量,您会将增量与权重和激活函数的导数相乘。

现在魔术来了...如果您拥有转换层,请大胆地猜测您的操作。我来帮忙要计算dF,需要将D6与L5的原始输入进行卷积。我希望看起来很熟悉。为了获得下一个增量,您需要使用D6对原始滤波器进行完全卷积,然后将其传递给L4。池化层上有大量的资源,它们非常简单,所以我宁愿跳过它们。

如果您使用的是python,这是一个好习惯,但是不要期望它可用。这是一个非常缓慢的过程,因此,除了玩弄之外,还需要使用诸如tensorflow / keras / etc之类的框架。