Pytorch maxpool的ceil_mode用法
pytorch里面的maxpool,有一个属性叫ceil_mode,这个属性在api里面的解释是
ceil_mode:whenTrue,willuseceilinsteadoffloortocomputetheoutputshape
也就是说,在计算输出的shape的时候,如果ceil_mode的值为True,那么则用天花板模式,否则用地板模式。
???
举两个例子就明白了。
#coding:utf-8 importtorch importtorch.nnasnn fromtorch.autogradimportVariable classNet(nn.Module): def__init__(self): super(Net,self).__init__() self.maxp=nn.MaxPool2d(kernel_size=2,ceil_mode=False) defforward(self,x): x=self.maxp(x) returnx square_size=6 inputs=torch.randn(1,1,square_size,square_size) foriinrange(square_size): inputs[0][0][i]=i*torch.ones(square_size) inputs=Variable(inputs) print(inputs) net=Net() outputs=net(inputs) print(outputs.size()) print(outputs)
在上面的代码中,无论ceil_mode是TrueorFalse,结果都是一样
但是如果设置square_size=5,那么
当ceil_mode=True
Variablecontaining:
(0,0,.,.)=
000000
111111
222222
333333
444444
555555
[torch.FloatTensorofsize1x1x6x6]
torch.Size([1,1,3,3])
Variablecontaining:
(0,0,.,.)=
111
333
555
[torch.FloatTensorofsize1x1x3x3]
在上面的代码中,无论ceil_mode是TrueorFalse,结果都是一样
但是如果设置square_size=5,那么
当ceil_mode=True
Variablecontaining:
(0,0,.,.)=
00000
11111
22222
33333
44444
[torch.FloatTensorofsize1x1x5x5]
torch.Size([1,1,3,3])
Variablecontaining:(0,0,.,.)=
111
333
444
[torch.FloatTensorofsize1x1x3x3]
当ceil_mode=False
Variablecontaining:
(0,0,.,.)=
00000
11111
22222
33333
44444
[torch.FloatTensorofsize1x1x5x5]
torch.Size([1,1,2,2])
Variablecontaining:
(0,0,.,.)=
11
33
[torch.FloatTensorofsize1x1x2x2]
所以ceil模式就是会把不足square_size的边给保留下来,单独另算,或者也可以理解为在原来的数据上补充了值为