Deep learning Pytorch:如何在一批中处理不同的输入大小?

Deep learning Pytorch:如何在一批中处理不同的输入大小?,deep-learning,set,pytorch,Deep Learning,Set,Pytorch,我正在点云上实施与DeepSets架构密切相关的东西: 这意味着我正在处理一组输入(坐标),让完全连接的层分别处理每个输入,然后对它们执行平均池(然后进行进一步处理) 每个样本i的输入是一个形状张量[L_i,3],其中L_i是点数,最后一个维度是3,因为每个点都有x,y,z坐标。关键的是,L_i取决于样本。因此,每个实例的点数不同。当我把所有的东西都放进一个批次中时,我当前的输入形状是[B,L,3],其中L大于L\u I。单个样本用0填充。问题是网络不会忽略0,它们会被处理并反馈到平均池中。相

我正在点云上实施与DeepSets架构密切相关的东西:

这意味着我正在处理一组输入(坐标),让完全连接的层分别处理每个输入,然后对它们执行平均池(然后进行进一步处理)

每个样本i的输入是一个形状张量
[L_i,3]
,其中
L_i
是点数,最后一个维度是
3
,因为每个点都有x,y,z坐标。关键的是,
L_i
取决于样本。因此,每个实例的点数不同。当我把所有的东西都放进一个批次中时,我当前的输入形状是
[B,L,3]
,其中
L
大于
L\u I
。单个样本用0填充。问题是网络不会忽略0,它们会被处理并反馈到平均池中。相反,我希望平均池只考虑实际点(不填充0)。我确实有另一个数组存储长度
[L_1,L_2,L_3,L_4…]
,但我不知道如何使用它

我的问题是:如何以最优雅的方式在一批中处理不同的输入大小

这就是模型的定义方式:

encoder = nn.Sequential(nn.Linear(3, 128), nn.ReLU(), nn.Linear(128, 128))
x = self.encoder(x)
x = x.max(dim=1)[0]
decoder = ...

也许我遗漏了一些东西,但在您的示例代码中,您在哪里执行平均池?我在这个版本中执行最大池(
x.max(dim=1)[0]
)。我的目标是在哪种池类型或更复杂的操作方面保持灵活性。因此,解决方案不应包括向零值添加平均值等。