【发布时间】:2021-12-07 16:21:46
【问题描述】:
我想在pytorch中使用nn.Conv()对形状[197, 1, 768]到[197,1,128]的张量进行投影
【问题讨论】:
标签: pytorch conv-neural-network
我想在pytorch中使用nn.Conv()对形状[197, 1, 768]到[197,1,128]的张量进行投影
【问题讨论】:
标签: pytorch conv-neural-network
您可以使用 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])
【讨论】:
您可以使用宽泛的内核和/或结合特定的步幅来实现此目的。如果您坚持使用1 的膨胀,那么输入/输出空间维度关系由下式给出:
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])
【讨论】:
project(torch.rand(1, 197, 1, 768))[..., 0, :]挤压dim=2