numpy.convolve的结果与预期不符

时间:2017-11-03 12:38:57

标签: deep-learning convolution

我是Deep Learning的新手,我想我已经明白了Understanding NumPy's Convolve

我在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)在我的情况下是错误的,虽然我不知道如何以及为什么。任何回复都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我认为你对神经网络中的卷积实现感到困惑,这实际上是交叉相关。但是,如果您参考卷积的数学定义,您将看到第二个函数必须是时间反转的(或镜像的)。此外,请注意,如果第二个元素的大小更大(如您的情况),numpy交换araguments。因此得到的结果如下:

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

如果你想要numpy像你一样执行计算,你应该使用:

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

以下是卷积和互相关的有用说明:

perldoc use

答案 1 :(得分:0)

原因是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

:)