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
:)
我是深度学习的新手,我想我明白了这一点 了解 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
:)