首页 > 解决方案 > 更新 CNN 中的过滤器权重

问题描述

我设计了一个具有 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 层传播到 conv 层中的 3x3 过滤器?

谁能帮我这个 ?

谢谢你。

标签: filterconv-neural-networkmaskbackpropagation

解决方案


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

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

现在魔法来了……如果你有一个 conv 层,请大胆猜测你在做什么。让我帮一点忙。要计算 dF,您需要将 D6 与 L5 的原始输入进行卷积。我希望看起来很熟悉。为了获得下一个增量,您使用 D6 对原始过滤器执行完全卷积,并将其传递给 L4。池化层上有大量资源,它们非常简单,所以我宁愿跳过它们。

如果您使用的是 python,这是一个很好的做法,但不要指望它可以使用。这是一个非常缓慢的过程,所以除了玩游戏之外,还可以使用一些框架,比如 tensorflow/keras/etc。


推荐阅读