【问题标题】:How would I apply a nn.conv1d manually, given an input matrix and weight matrix?给定输入矩阵和权重矩阵,我将如何手动应用 nn.conv1d?
【发布时间】:2020-08-09 14:44:23
【问题描述】:

我试图了解 nn.conv1d 如何处理与 WaveNet 模型中的音频处理相关的特定示例的输入。

我有一个形状为(1,1,8820)的输入数据,它通过一个输入层(1,16,1),输出一个(1,16,8820)的形状。

我理解那部分,因为您可以将两个矩阵相乘。下一层是一个conv1d,内核大小=3,输入通道=16,输出通道=16,所以状态字典显示了一个形状为(16,16,3)的矩阵的权重。当 (1,16,8820) 的输入经过该层时,结果是另一个 (1,16,8820)。

层内发生了哪些乘法步骤以将权重应用于音频数据?换句话说,如果我想仅使用输入矩阵、state_dict 矩阵和 numpy 应用层(仅前向计算),我该怎么做?

这个例子使用了 Pytorch 的 nn.conv1d 层。另外,如果同一层有一个 dilation=2,那将如何改变操作?

【问题讨论】:

    标签: pytorch conv-neural-network


    【解决方案1】:

    卷积是一种特定类型的“滑动窗口操作”:也就是说,在输入的重叠滑动窗口上应用相同的函数/操作。
    在您的示例中,您将每 3 个重叠的时间样本(每个样本有 16 个维度)视为 16 个过滤器的输入。因此,您的权重矩阵为 3x16x16。

    您可以将其视为"unfolding" (1, 16, 8820) 信号进入(1, 16*3, 8820) 滑动窗口。然后乘以16*3 x 16权重矩阵得到形状为(1, 16, 8820)的输出。

    填充、扩张和步幅会影响“滑动窗口”的形成方式。
    请参阅nn.Unfold 了解更多信息。

    【讨论】:

    • 你对展开矩阵的解释真的让我明白了,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多