PyTorch的自适应池化Adaptive Pooling实例
简介
自适应池化AdaptivePooling是PyTorch含有的一种池化层,在PyTorch的中有六种形式:
自适应最大池化AdaptiveMaxPooling:
torch.nn.AdaptiveMaxPool1d(output_size)
torch.nn.AdaptiveMaxPool2d(output_size)
torch.nn.AdaptiveMaxPool3d(output_size)
自适应平均池化AdaptiveAveragePooling:
torch.nn.AdaptiveAvgPool1d(output_size)
torch.nn.AdaptiveAvgPool2d(output_size)
torch.nn.AdaptiveAvgPool3d(output_size)
具体可见官方文档。
官方给出的例子: >>>#targetoutputsizeof5x7 >>>m=nn.AdaptiveMaxPool2d((5,7)) >>>input=torch.randn(1,64,8,9) >>>output=m(input) >>>output.size() torch.Size([1,64,5,7]) >>>#targetoutputsizeof7x7(square) >>>m=nn.AdaptiveMaxPool2d(7) >>>input=torch.randn(1,64,10,9) >>>output=m(input) >>>output.size() torch.Size([1,64,7,7]) >>>#targetoutputsizeof10x7 >>>m=nn.AdaptiveMaxPool2d((None,7)) >>>input=torch.randn(1,64,10,9) >>>output=m(input) >>>output.size() torch.Size([1,64,10,7])
AdaptivePooling特殊性在于,输出张量的大小都是给定的output_sizeoutput\_sizeoutput_size。例如输入张量大小为(1,64,8,9),设定输出大小为(5,7),通过AdaptivePooling层,可以得到大小为(1,64,5,7)的张量。
原理
>>>inputsize=9 >>>outputsize=4 >>>input=torch.randn(1,1,inputsize) >>>input tensor([[[1.5695,-0.4357,1.5179,0.9639,-0.4226,0.5312,-0.5689,0.4945,0.1421]]]) >>>m1=nn.AdaptiveMaxPool1d(outputsize) >>>m2=nn.MaxPool1d(kernel_size=math.ceil(inputsize/outputsize),stride=math.floor(inputsize/outputsize),padding=0) >>>output1=m1(input) >>>output2=m2(input) >>>output1 tensor([[[1.5695,1.5179,0.5312,0.4945]]])torch.Size([1,1,4]) >>>output2 tensor([[[1.5695,1.5179,0.5312,0.4945]]])torch.Size([1,1,4])
通过实验发现:
下面是AdaptiveAveragePooling的c++源码部分。
templatestaticvoidadaptive_avg_pool2d_out_frame( scalar_t*input_p, scalar_t*output_p, int64_tsizeD, int64_tisizeH, int64_tisizeW, int64_tosizeH, int64_tosizeW, int64_tistrideD, int64_tistrideH, int64_tistrideW) { int64_td; #pragmaompparallelforprivate(d) for(d=0;d 以上这篇PyTorch的自适应池化AdaptivePooling实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。