【问题标题】:Cross-correlation of two 1D tensors两个一维张量的互相关
【发布时间】:2021-11-15 06:45:48
【问题描述】:

我的输入信号形状 = (N,) 和内核形状 = (K,)。我认为两者的大小应该相同,以便我在输入信号和内核之间获得互相关输出。有什么方法可以在输入信号上使用零填充来实现结果?

例如:输入信号 (1,2,3,4,5) 和内核 (6,7) 之间的互相关。

【问题讨论】:

    标签: pytorch padding shapes tensor cross-correlation


    【解决方案1】:

    如果我错了,请告诉我,但这似乎对应于一维卷积:

    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)
    

    【讨论】:

    • 我有以下尺寸 输入信号:torch.Size([200]) 内核:torch.Size([18]) 输出:torch.Size([183]​​) 如何制作尺寸我的输出等于输入?
    • 你有#a + p - #v + 1= #out,其中p是填充量,所以p = #out - #a + #v - 1。知道#a = #out,你就有p = #v - 1。因此,您应该使用 #v - 1 元素填充 a
    • @Ivan 是的,PyTorch 的Conv1d 完全等同于documentation 提到的互相关:where ⋆ is the valid cross-correlation operator [...]
    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2017-09-24
    • 2020-10-26
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多