相关疑难解决方法(0)

pytorch中的自适应池如何工作?

自适应池是一个很棒的功能,但是它如何工作?似乎是以一种似乎很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

8
推荐指数
2
解决办法
4391
查看次数

标签 统计

pytorch ×1