Pytorch: Как мне работать с разными размерами входных данных в одном пакете? - PullRequest
0 голосов
/ 21 февраля 2020

Я реализую что-то тесно связанное с архитектурой DeepSets на облаках точек:

https://arxiv.org/abs/1703.06114

Это означает, что я работаю с набором входных данных (координат ), полностью соединенные слои обрабатывают каждый из них по отдельности, а затем выполняют среднее объединение по ним (чтобы затем выполнить дальнейшую обработку).

Вход для каждого образца i представляет собой тензор формы [L_i, 3], где L_i - количество точек, а последнее измерение - 3, поскольку каждая точка имеет координаты x, y, z. Важно, что L_i зависит от образца. Так что у меня разное количество баллов за экземпляр. Когда я помещаю все в пакет, у меня есть вход в форме [B, L, 3], где L больше, чем L_i для всех i. Отдельные образцы дополняются нулями. Проблема в том, что 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 = ...
...