Можно ли создать максимальный пул для предложений с динамической длиной без заполнения в Pytorch? - PullRequest
2 голосов
/ 14 мая 2019

Давайте предположим, что у меня есть три набора различных тензоров:

x1 = torch.randn(3,16)
x2 = torch.randn(5,16)
x3 = torch.randn(2,16)

Для каждого из них я хочу применить максимальный пул и получить 1x16 размерный тензор в качестве выходных данных.Есть ли способ сделать это без заполнения входных тензоров?Я имею в виду, я думаю, что могу делать то, что хочу, сначала добавив тензоры x1 и x3, чтобы они также стали тензорами 5x16.и тогда я могу применить оператор maxpool1d (), чтобы получить то, что я хочу.

1 Ответ

0 голосов
/ 15 мая 2019

Да.

Вы можете просто применить 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() в комбинации с .unsqueeze. Предполагая, что у вас есть заданная x1 с размерностью (2,16), просто выполните

x1.view(16,2).unsqueeze(dim=0)

и затем выполнить обратное преобразование

result_x1 = op(x1).view(1,16) # only one value left due to pooling
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...