我是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)在我的情况下是错误的,虽然我不知道如何以及为什么。任何回复都将不胜感激。
答案 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')
以下是卷积和互相关的有用说明:
答案 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
:)