numpy.convolve 的结果不符合预期

The result of numpy.convolve is not as expected

我是深度学习的新手,我想我明白了这一点 了解 NumPy 的卷积

我在 numpy 中试过这个

np.convolve([3, 4], [1, 1, 5, 5], 'valid')

输出是

array([ 7, 19, 35])

根据link输出的第二个元素应该是23。

  [3 4]
[1 1 5 5]
= 3 * 1 + 4 * 5 = 23

似乎第二个元素 (19) 在我的情况下是错误的,但我不知道如何以及为什么。如有任何回复,我们将不胜感激。

我认为你对神经网络中的卷积实现感到困惑,它实际上是互相关。但是,如果您参考卷积的数学定义,您会发现第二个函数必须进行时间反转(或镜像)。另外,请注意,如果第二个元素的尺寸更大(如您的情况),则 numpy 会交换参数。所以你得到的结果如下:

[1*4+3*1,1*4+3*5,5*4+3*5]

如果您希望 numpy 像您一样执行计算,您应该使用:

np.correlate([3, 4], [1, 1, 5, 5], 'valid')

这里是卷积和互相关的有用说明:

原因是numpy反转了较短的数组,这里[3, 4]变成了[4,3]。这是因为卷积的定义而完成的(您可以在维基百科的部分定义中找到更多信息https://en.wikipedia.org/wiki/Convolution)。

所以事实上:np.convolve([3, 4], [1, 1, 5, 5], 'valid') 使得:

[4 3]

[1 1 5 5]

= 4 * 1 + 3 * 5 = 19

:)