1

我不明白为什么在使用卷积神经网络时需要翻转过滤器。为什么卷积滤波器在卷积神经网络中翻转?

据烤宽面条文档,

flip_filters:布尔(默认:true)

是否滑动他们在输入, 进行卷积(这是默认值)之前翻转过滤器,或者不要将它们翻转 并执行关联。需要注意的是在意大利千层面的一些其他卷积 层,翻转招致的开销,并通过 默认情况下禁用 - 利用 另一层了解到的权重时查看文档。

这是什么意思?在任何神经网络书籍中进行卷积时,我从来没有读过关于翻转滤波器的内容。请问有人澄清?

+0

这是某种修正不同层类型,见https://github.com/Lasagne/Recipes/issues/39 – frozen

回答

1

的根本原因的转置卷积滤波器是卷积运算的定义 - 这是信号处理的结果。在执行卷积时,您希望内核相对于执行卷积的轴进行翻转,因为如果不这样做,您最终将计算信号与其自身的相关性。如果您考虑将时间序列应用于一个时间序列,其中所讨论的函数变化非常剧烈 - 您不希望卷积与您的信号相关或相关,那么理解起来会容易一些。

This answer来自数字信号处理堆栈交换站点给出了一个很好的解释,它介绍了为什么卷积滤波器被定义为沿着信号的反方向进行数学分析。

This page走过,其中翻盖做了详细的例子。这是用于边缘检测的特定类型的滤波器,称为Sobel滤波器。它没有解释为什么翻转完成,但是很好,因为它给了你一个2D解决方案。我提到在1D的情况下(来自DSP SE网站的答案真的是一个很好的解释),它更容易理解(为什么是(因为,为什么卷积是这样定义的)?)。但此惯例也适用于2D和3D(Conv2DDNN和Conv3DDNN层都有flip_filter选项)。然而,归根结底,是因为卷积滤波器权都没有的东西,人的计划,而是由网络“学习”,这完全是任意的 - 除非你是从另一个网络加载权,在这种情况下,你必须是一致的与该网络中卷积的定义一致。如果卷积被正确定义(即按照惯例),则过滤器将被翻转。如果它被错误地定义(以更“幼稚”和“懒惰”的方式),它不会。

更广领域是有回旋的是“线性系统理论”,让搜索这个词,可能会找到更多关于这一点,尽管神经网络的上下文之外的部分。

注意,在烤宽面条卷积/相关区别还提到在corrmm.py类的文档字符串:

flip_filters:布尔(默认值:假) 是否翻转滤波器并执行卷积,或不翻转 他们执行的相关性。翻转增加了一些开销,所以它 默认情况下禁用。在大多数情况下,这不会有所作为 无论如何,因为过滤器教训。类:lasagne.layers.Conv2DLayer,例如然而,flip_filters应 来,如果权重被装进去的是使用 定期了解到设为True