为什么 nn.Conv1d 作用于二维特征 [b, c, h, w]?

Why does nn.Conv1d work on 2d feature [b, c, h, w]?

我想知道为什么 conv1d 适用于 2d 特征(批次、通道、高度、宽度)。

当我放置 2d 特征时,nn.Conv1d(channel, channel, kernel_size=(1,1)) 有效,但给出与 nn.Conv2d(channel, channel, kernel_size=1).

我想知道为什么 conv1d 有效,以及 1d 卷积中 2d 内核大小的含义。

“我想知道为什么 conv1d 有效,以及 1d 卷积中的 2d 内核大小意味着什么”

它没有任何理由不工作。在引擎盖下所有这些“卷积”的意思是“点积”,现在它可以在矩阵和向量、矩阵和矩阵、向量和向量等之间。简单地说,真正的区别在 1D 和 2D 卷积之间 沿着输入的空间维度 移动的自由 。这意味着如果你看 1D 卷积,它只能沿一个方向移动,即输入的时间维度(注意内核可以是向量,矩阵,无论什么都不是'无关紧要)。另一方面,2D 卷积可以自由地沿输入的 2 个维度(高度和宽度)移动,即空间维度。如果它仍然令人困惑,请查看下面的 gif。

一维卷积实际应用:

注意:这是一个内核大小为 3x3 的 1D 卷积,看看它如何只向下移动时间维度的输入。

二维卷积实际应用:

注意:这是一个二维卷积,内核大小为3x3,看看它是如何沿着输入的宽度和高度移动的,这是空间维度。

我认为现在很清楚 1D 和 2D conv 之间的实际区别是什么,以及为什么它们对相同的输入都会产生不同的结果。