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]
.
Вопросы :
- Для того, чтобы сделать мини-пакет таким же, как один за другим, какой нормальный способ использовать?
- Существует ли данный API Pytorch?
- Если нет, то как его реализовать?что?