Ken*_*han 6 convolution neural-network theano conv-neural-network lasagne
我不明白为什么在使用卷积神经网络时需要翻转过滤器。
根据千层面文件,
翻转过滤器:布尔(默认值:真)
是否在将过滤器滑过输入之前翻转过滤器,执行卷积(这是默认设置),或者不翻转它们并执行相关。请注意,对于 Lasagne 中的其他一些卷积层,翻转会产生开销,并且默认情况下处于禁用状态 - 使用从另一层学习的权重时请查看文档。
这意味着什么?在任何神经网络书籍中,我从未读过关于卷积时翻转滤波器的内容。请有人澄清一下好吗?
cha*_*id1 12
转置卷积滤波器的根本原因是卷积运算的定义——这是信号处理的结果。执行卷积时,您希望内核相对于执行卷积的轴翻转,因为如果不这样做,您最终会计算信号与其自身的相关性。如果您考虑将 1D 卷积应用于其中所讨论的函数变化非常剧烈的时间序列,则更容易理解 - 您不希望卷积被您的信号扭曲或相关。
这个来自数字信号处理堆栈交换站点的答案给出了一个很好的解释,它通过数学解释了为什么卷积滤波器被定义为信号的相反方向。
本页介绍了完成翻转的详细示例。这是一种特殊类型的用于边缘检测的滤波器,称为 Sobel 滤波器。它没有解释为什么要完成翻转,但很好,因为它为您提供了一个 2D 解决方案。
我提到在 1D 情况下更容易理解为什么(例如,为什么卷积以这种方式定义)(来自 DSP SE 站点的答案确实是一个很好的解释);但是这个约定也适用于 2D 和 3D(Conv2DDNN 和 Conv3DDNN 层都可以flip_filter选择)。然而,最终,因为卷积滤波器的权重不是人类编程的东西,而是由网络“学习”的,所以它完全是任意的——除非你从另一个网络加载权重,在这种情况下,您必须与该网络中卷积的定义保持一致。如果卷积定义正确(即根据约定),过滤器将被翻转。如果它定义不正确(以更“天真”和“懒惰”的方式),则不会。
卷积所属的更广泛的领域是“线性系统理论”,因此搜索这个术语可能会更多地涉及到这一点,尽管不在神经网络的背景下。
请注意,在烤宽面条中corrmm.py类的文档字符串中也提到了卷积/相关区别:
flip_filters : bool (default: False) 是否翻转过滤器并执行卷积,或不翻转它们并执行相关。翻转会增加一些开销,因此默认情况下禁用它。在大多数情况下,这不会产生任何影响,因为过滤器是学习的。但是,
flip_filters如果将True使用常规 :class: 学习的权重加载到其中,则应设置lasagne.layers.Conv2DLayer为。