多维张量上的感知器

问题描述

我正在尝试使用感知器将大小为 [1,24,768] 的张量减小到另一个大小为 [1,1,768] 的张量。我可以使用的唯一方法是首先将输入张量重塑为 [1,24*768],然后将其通过线性层。我想知道这种转换是否有更优雅的方式——除了使用 RNN 之外,因为我不想使用它。对于我想要进行的转换,通常还有其他方法吗?这是我执行上述操作的代码

lin = nn.Linear(24*768,768)

# x is in shape of [1,768]
# out is in shape of [1,768]
x = x.view(1,-1)
out = lin(x)

解决方法

如果广播让您感到困扰,您可以使用 nn.Flatten 来实现:

>>> m = nn.Sequential(
...    nn.Flatten(),...    nn.Linear(24*768,768))

>>> x = torch.rand(1,24,768)

>>> m(x).shape
torch.Size([1,768])

如果你真的想要额外的维度,你可以在 axis=1 上解压张量:

>>> m(x).unsqueeze(1).shape
torch.Size([1,1,768])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...