Адаптивный пул - отличная функция, но как она работает?Кажется, что вставка пэдов или сжатие / расширение размеров ядра происходит, как кажется, неуклюже, но довольно произвольно.Документация по pytorch, которую я могу найти, не является более описательной, чем «поместите желаемый размер вывода здесь».Кто-нибудь знает, как это работает, или может указать, где это объясняется?
Какой-то тестовый код на тензоре 1x1x6 (1,2,3,4,5,6) с адаптивным выводом размера 8:
import torch
import torch.nn as nn
class TestNet(nn.Module):
def __init__(self):
super(TestNet, self).__init__()
self.avgpool = nn.AdaptiveAvgPool1d(8)
def forward(self,x):
print(x)
x = self.avgpool(x)
print(x)
return x
def test():
x = torch.Tensor([[[1,2,3,4,5,6]]])
net = TestNet()
y = net(x)
return y
test()
Вывод:
tensor([[[ 1., 2., 3., 4., 5., 6.]]])
tensor([[[ 1.0000, 1.5000, 2.5000, 3.0000, 4.0000, 4.5000, 5.5000,
6.0000]]])
Если зеркальное отображение слева и справа (работает (1,1,2,3,4,5,6,6)), и имеет ядро 2, тогда выходы для всех позиций, кроме 4 и 5, имеют смысл, за исключением, конечно, выходных данных неправильного размера.Это также заполнение 3 и 4 внутри?Если это так, он работает с (1,1,2,3,3,4,4,5,6,6), который при использовании ядра размера 2 выдает неправильный размер вывода и также пропускает выход 3,5.Меняется ли размер ядра?
Я что-то упускаю из виду, как это работает?