首页 > 解决方案 > 为什么 nn.Conv1d 对二维特征 [b, c, h, w] 起作用?

问题描述

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

一个 nn.Conv1d(channel, channel, kernel_size=(1,1)) 在我放置 2d 特征时起作用,但给出的结果与 nn.Conv2d(channel, channel, kernel_size=1) 不同。

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

标签: pythonneural-networkpytorchconvolution

解决方案


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

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

一维卷积在行动:

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

2D 卷积在行动:

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

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


推荐阅读