1. 程式人生 > 程式設計 >對Pytorch中Tensor的各種池化操作解析

對Pytorch中Tensor的各種池化操作解析

AdaptiveAvgPool1d(N)

對一個C*H*W的三維輸入Tensor,池化輸出為C*H*N,即按照H軸逐行對W軸平均池化

>>> a = torch.ones(2,3,4)
>>> a[0,1,2] = 0
>>>> a
tensor([[[1.,1.,1.],[1.,0.,1.]],[[1.,1.]]])
     
>>> nn.AdaptiveAvgPool1d(5)(a)
tensor([[[1.0000,1.0000,1.0000],[1.0000,0.5000,1.0000]],[[1.0000,1.0000]]])
     
>>> nn.AdaptiveAvgPool1d(1)(a)
tensor([[[1.0000],[0.7500],[1.0000]],[[1.0000],[1.0000],[1.0000]]])

AdaptiveAvgPool2d((M,N))

對一個B*C*H*W的四維輸入Tensor,池化輸出為B*C*M*N,即按照C軸逐通道對H*W平面平均池化

>>> a = torch.ones(2,2,4)
>>> a[:,:,1] = 0
>>> a
tensor([[[[1.,1.]]],[[[1.,1.]]]])
     
>>> nn.AdaptiveAvgPool2d((1,2))(a)
tensor([[[[0.5000,[[0.5000,1.0000]]],[[[0.5000,1.0000]]]])
     
>>> nn.AdaptiveAvgPool2d(1)(a)
tensor([[[[0.7500]],[[0.7500]]],[[[0.7500]],[[0.7500]]]])

AdaptiveAvgPool3d((M,N,K))

對一個B*C*D*H*W的五維輸入Tensor,池化輸出為B*C*M*N*K,即按照C軸逐通道對D*H*W平面平均池化

>>> a = torch.ones(1,0:2] = 0
>>> a
tensor([[[[[0.,[0.,[[0.,1.]]]]])
     
>>> nn.AdaptiveAvgPool3d((1,2))(a)
tensor([[[[[0.,1.]]]]])
     
>>> nn.AdaptiveAvgPool3d(1)(a)
tensor([[[[[0.5000]]],[[[1.0000]]]]])

以上這篇對Pytorch中Tensor的各種池化操作解析就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。