将大小为 768 的张量转换为 128

Convert tensor of size 768 to 128

我想使用 nn.Conv()

在 pytorch 中对形状 [197, 1, 768][197,1,128] 的张量进行投影

您可以使用宽扁平内核 and/or 结合特定步幅来实现此目的。如果你坚持 1 的膨胀,那么 input/output 空间维度关系由下式给出:

out = [(2p + x - k)/s + 1]

其中 p 是填充,k 是内核大小,s 是步幅。 []引爆整个部分数量

在这里申请你有:

128 = [(2p + 768 - k)/s + 1]

所以你会得到:

p = 2*p + 768 - (128-1)*s # one off

如果你施加 p = 0,并且 s = 6 你会发现 k = 6

>>> project = nn.Conv2d(197, 197, kernel_size=(1, 6), stride=6)
>>> project(torch.rand(1, 197, 1, 768)).shape
torch.Size([1, 197, 1, 128])

或者,一种更直接但不同的方法是使用全连接层学习映射:

>>> project = nn.Linear(768, 128)
>>> project(torch.rand(1, 197, 1, 768)).shape
torch.Size([1, 197, 1, 128])

您可以使用内核大小和步长 6,因为这是输入和输出时间大小之间的因数:

x = torch.randn(197, 1, 768)
conv = nn.Conv1d(in_channels=1, out_channels=1, kernel_size=6, stride=6)
out = conv(x)
print(out.shape)
> torch.Size([197, 1, 128])

Solution Source