Pytorch: как замаскировать гибкий размер ввода для среднего пула? - PullRequest
1 голос
/ 01 июля 2019

Backgroud : Я хотел бы применить свертки и среднее объединение к последовательностям для задачи классификации последовательностей.

Задача : без маски для входных данных, вычисление мини-партии и по-одному будут разные.Например:

# Two sequences.
s1 = torch.range(start=1, end=6).view(-1, 1)
s2 = torch.range(start=1, end=3).view(-1, 1)

##########################################
# one-by-one

# Convolutions.
kernels = torch.ones(1, 1, 2)
h1 = F.conv1d(s1.view(1, 1, -1), kernels) #h1=[[[3, 5, 7, 9, 11]]]
h2 = F.conv1d(s2.view(1, 1, -1), kernels) #h2=[[[3, 5]]]

# Average pooling.
h1 = h1.mean(-1) #h1=[[7]]
h2 = h2.mean(-1) #h2=[[4]]

##########################################
# mini-batch
s = torch.nn.utils.rnn.pad_sequence([s1, s2], batch_first=True)
s = s.permute(0, 2, 1)
h = torch.mean(F.conv1d(s, kernels), dim=-1) #h=[[7], [2.2]]

Как видите, h отличается от [h1, h2].

Вопросы :

  1. Для того, чтобы сделать мини-пакет таким же, как один за другим, какой нормальный способ использовать?
  2. Существует ли данный API Pytorch?
  3. Если нет, то как его реализовать?что?
...