【发布时间】:2021-11-15 06:45:48
【问题描述】:
我的输入信号形状 = (N,) 和内核形状 = (K,)。我认为两者的大小应该相同,以便我在输入信号和内核之间获得互相关输出。有什么方法可以在输入信号上使用零填充来实现结果?
例如:输入信号 (1,2,3,4,5) 和内核 (6,7) 之间的互相关。
【问题讨论】:
标签: pytorch padding shapes tensor cross-correlation
我的输入信号形状 = (N,) 和内核形状 = (K,)。我认为两者的大小应该相同,以便我在输入信号和内核之间获得互相关输出。有什么方法可以在输入信号上使用零填充来实现结果?
例如:输入信号 (1,2,3,4,5) 和内核 (6,7) 之间的互相关。
【问题讨论】:
标签: pytorch padding shapes tensor cross-correlation
如果我错了,请告诉我,但这似乎对应于一维卷积:
NumPy 有一个内置函数np.correlate,我们可以比较:
>>> a = np.arange(1, 6)
>>> v = np.arange(6, 8)
>>> np.correlate(a, v)
array([20, 33, 46, 59])
在 PyTorch 中使用torch.nn.functional.conv1d(输入和权重需要是三维的):
>>> x = torch.tensor(a, dtype=float)[None, None]
>>> w = torch.tensor(v, dtype=float)[None, None]
>>> F.conv1d(x, w)
tensor([[[20., 33., 46., 59.]]], dtype=torch.float64)
【讨论】:
#a + p - #v + 1= #out,其中p是填充量,所以p = #out - #a + #v - 1。知道#a = #out,你就有p = #v - 1。因此,您应该使用 #v - 1 元素填充 a。
Conv1d 完全等同于documentation 提到的互相关:where ⋆ is the valid cross-correlation operator [...]。