自适应池是一个很棒的功能,但是它如何工作?似乎是以一种似乎很but琐但相当武断的方式插入填充或缩小/扩展内核大小。我可以找到的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()
Run Code Online (Sandbox Code Playgroud)
输出:
tensor([[[ 1., 2., 3., 4., 5., 6.]]])
tensor([[[ 1.0000, 1.5000, 2.5000, 3.0000, 4.0000, 4.5000, 5.5000,
6.0000]]])
Run Code Online (Sandbox Code Playgroud)
如果它左右镜像(操作(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输出。它会改变内核的大小吗?
我是否缺少有关此工作方式的明显信息?
pytorch ×1