如何在 pytorch 中创建对向量而不是标量进行操作的卷积或线性层?

数据挖掘 神经网络 火炬 矩阵
2022-02-20 00:14:33

考虑nn.Linear(2,3)如下所示的层变换。它使用 2x3 标量权重矩阵为输出中的每个标量元素创建加权和。

现在假设我想对一维向量(例如词嵌入)进行操作,而不是标量。所以在这种情况下a,andb是向量,权重w都是方阵。

nn 中的一种预建层类型可以实现这一点(对于线性或卷积)吗?或者有什么方法可以转换我的数据以使用标准图层类型完成等效的操作?

谢谢!

编辑:我知道对于像示例这样的给定层,我可以只做矩阵运算的所有排列并自己存储它们的权重。我想知道是否有更好的方法。

输入图片描述

编辑:好的,我认为我想要的东西不存在,但让我试着澄清一下,希望可能有一些类似的操作......

忽略偏置向量nn.Linear(2,3)正在执行以下操作:

我正在寻找的是与此类似的情况,其中 a、b、c、... 是向量,权重是这些向量的线性变换如果我的符号在这里关闭,我深表歉意,但是写成行向量:

在此处输入图像描述

这意味着我们需要一组 3 维权重,而不是 2 维权重nn.Linear同样,我想这完全是一个不同的操作,但我想知道这种东西是否有名称,或者是否有某种原因通常不需要它(例如,对数据进行一些真正等效的转换) .

1个回答

如果我理解你的问题1,你会想要一个 shape 的输入张量(2, 3),其中每个元素实际上都是一个向量。如果是这种情况,您本质上是在谈论 3d 张量(而不是 2d)。

例如,如果每个向量的长度为 5 个元素,则您的输入将具有 shape (2, 3, 5)

为了计算卷积,有一些层将维度作为参数——看看像 Conv3d 这样的卷积层。

要在此输入上计算线性层,您仍然只需要将张量展平重塑为单个向量。

如果您的矢量长度可以变化,您将不得不考虑通过截断它们(使一些更短)或填充(添加例如零以使较短的更长)或两种技术的混合来使它们全部匹配。


1如果我还没有完全理解,请在您的问题中的示例中添加更多详细信息