Python 有没有可能在Pytorch中没有填充的情况下对动态长度的句子进行最大池?

Python 有没有可能在Pytorch中没有填充的情况下对动态长度的句子进行最大池?,python,pytorch,Python,Pytorch,假设我有三组不同的张量: x1 = torch.randn(3,16) x2 = torch.randn(5,16) x3 = torch.randn(2,16) 对于它们中的每一个,我想应用一个最大池,并得到1x16维张量作为输出。有没有不填充输入张量的方法? 我的意思是,我想我可以做我想做的事情,首先填充x1和x3张量,使它们也变成5x16张量。然后我可以应用maxpool1d()操作符来获得我想要的。是 您只需将MaxPool1d()应用于任何大小,它们(可能)都会自动填充。请注意,不幸

假设我有三组不同的张量:

x1 = torch.randn(3,16)
x2 = torch.randn(5,16)
x3 = torch.randn(2,16)
对于它们中的每一个,我想应用一个最大池,并得到
1x16
维张量作为输出。有没有不填充输入张量的方法? 我的意思是,我想我可以做我想做的事情,首先填充x1和x3张量,使它们也变成5x16张量。然后我可以应用maxpool1d()操作符来获得我想要的。

您只需将
MaxPool1d()
应用于任何大小,它们(可能)都会自动填充。请注意,不幸的是,您需要切换维度,因为默认情况下,它将沿着第三维查找池

下面是一个简短的工作示例:

import torch
import torch.nn as nn

op = nn.MaxPool1d(5) # kernel size of 5
x1 = torch.zeros([1,16,1])
x2 = torch.zeros([1,16,3])

op(x1) # works

op(x2) # works as well
要使张量处于正确的维度,可以使用
.view()
,并与
.unsqueze
结合使用。假设给定的
x1
具有维度
(2,16)
,只需执行以下操作

x1.view(16,2).unsqueeze(dim=0)
然后通过

result_x1 = op(x1).view(1,16) # only one value left due to pooling

是否希望所有3个张量的
1x16
维度输出?或者,是否要对串联的张量应用最大池,只获取一个形状为
1x16
的输出张量?